数据共享之单例&NSUserDefaults


1st,Nov,2015 JolieYang

问题: 用单例存储用户个人资料; 在第三方登陆的时候出现问题.
场景: 第一次第三方登陆时保存了用户的登陆类型(q/weixin/weibo).退出应用再进入后单例中的登陆类型变量就为空了.
结论: 目前仍未解决.

单例
单例的生命周期


优点:避免频繁创建销毁对象-> 提高性能; 在内存中只有一个对象,节省内存空间;
缺点:会随着程序的挂起而消亡;
    只支持NSString, NSNumber,NSDate, NSArray, NSDictionary;

延伸:
  • 多线程使用单例使用共享资源时,线程安全问题。
  • 单例应该只用来保存全局的状态,并且不能和任何作用域绑定。如果这些状态的作用域比一个完整的应用程序的生命周期要短,那么这个状态就不应该使用单例来管理。

 在Cocoa Touch中,有:

NSUserDefault(可以方便读取应用设置数据,用来是持久化数据的);
NSNotificationCenter(采用观察者模式提供信息广播通知的通知中心类)等单例类。

Cocoa框架中也有两个常见的类:

(1)NSFileManger(提供了访问文件系统的通用操作);

(2)NSBundle(提供了动态加载或者卸载的可执行代码,定位资源文件以及资源本地化,访问文件系统等功能)类。



懒汉式实例:调用实例方法才实例化对象
饿汉式实例:单例类被加载就实例化返回引用






NSUserDefaults
存储轻量级的本地数据
1. 存取数据
[[NSUserDefaults standardUserDefaults]  setValue: someValue forKey: @"keyValue"];
1.1 存储BOOL值

[[NSUserDefaultsstandardUserDefaults] setBool:YESforKey:@"notFirstLaunch"];


2. 读数据
[[NSUserDefaults standardUserDefaults]  valueForKey: @"keyValue"];

3. 数据置空
[[NSUserDefaults standardUserDefaults]  removeObjectForKey:@"keyValue"];

// 同步

[[NSUserDefaults standardUserDefaults] synchronize];




参考资料:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值