数据共享之单例&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];




参考资料:

iOS单例模式 or NSUserDefaults

IOS单例模式及单例模式的优缺点


设计模式深入学习IOS版(5)单例模式

避免滥用单例




你可能感兴趣的:(数据共享之单例&NSUserDefaults)