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];
参考资料: