您的位置:首页 > 其它

数据共享之单例&NSUserDefaults

2015-11-01 16:38 246 查看
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)单例模式


避免滥用单例

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: