深入学习NSUserDefaults/standardUserDefaults
来源:互联网 发布:线切割hl绘图编程软件 编辑:程序博客网 时间:2024/06/13 18:05
NSUserDefaults
NSUserDefaults 是iOS Foundation 框架提供的一种用于存储管理单例。
Tip 1:支持存储的类型
- NSArray
- NSData
- NSDictionary
- NSNumber
- NSString
通过NSData可以存储大部分类型的文件,例如要存储一张图片可以先把图片转为NSData。
// Create instances of NSDataNSData *imageData = UIImageJPEGRepresentation(contactImage, 100);// Store the dataNSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];[defaults setObject:imageData forKey:@"image"];
Tip 2: 存储使用方法
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];[defaults setInteger:9001 forKey:@"HighScore"];[defaults synchronize];
Tip 3: 获取存储的data
// Get the stored data before the view loadsNSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];NSData *imageData = [defaults dataForKey:@"image"];UIImage *contactImage = [UIImage imageWithData:imageData];
Tip 4: 对于常见的值类型,如Bool,Float,Integer 等可以使用系统提供的一些方法来存储不同类型值。
- setBool:forKey:- setFloat:forKey:- setInteger:forKey:- setDouble:forKey:- setURL:forKey:
对于存储Bool类型值,取值的时候需要注意使用Bool变量来接住,而不是直接判断对[[NSUserDefaults standardUserDefaults] boolForKey:],直接判断表示[NSUserDefaults standardUserDefaults] 是否能取到对应的Key值,YES表示has value,NO表示no value。
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:APP_IS_FIRST_SESSION_ID];BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:APP_IS_FIRST_SESSION_ID];//这里的Flag为YESif ([[NSUserDefaults standardUserDefaults] boolForKey:APP_IS_FIRST_SESSION_ID]) { //直接对取值判断,将总是True,这个代表[NSUserDefaults standardUserDefaults]能取到值}
Tip 5: NSUserDefaults域
user defaults数据库中其实是由多个层级的域组成的,当你读取一个键值的数据时,NSUserDefaults从上到下透过域的层级寻找正确的值,不同的域有不同的功能,有些域是可持久的,有些域则不行。
- 应用域(application domain)是最重要的域,它存储着你app通过NSUserDefaults
set…forKey添加的设置。 - 注册域(registration domain)仅有较低的优先权,只有在应用域没有找到值时才从注册域去寻找。
- 全局域(global domain)则存储着系统的设置
- 语言域(language-specific domains)则包括地区、日期等
- 参数域( argument domain)有最高优先权
注意需要在每次启动app并且没有在user defaules中读取数据的时候调用以上方法,因为registerDefaults:不能把这些默认数据存储到硬盘上,所以application:didFinishLaunchingWithOptions是最合适的地方。
NSURL *defaultPrefsFile = [[NSBundle mainBundle]URLForResource:@"DefaultPreferences" withExtension:@"plist"];NSDictionary *defaultPrefs = [NSDictionary dictionaryWithContentsOfURL:defaultPrefsFile];[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
这样做的原因是:默认情况下,应用域是空的,没见键也没有值。当应用第一次设置某项用户偏好设置的值时,相应的值会通过指定的键加入应用域。当通过NSUserDefaults获取某项用户偏好设置的值时,NSUserDefaults会先在应用域中查找,如果找到了值,NSUserDefaults就会返回这个值。如果没有找到,NSUserDefaults就会在注册域中查找并返回默认值。
user defaults数据库中其实是由多个层级的域组成的,当你读取一个键值的数据时,NSUserDefaults从上到下透过域的层级寻找正确的值,不同的域有不同的功能,有些域是可持久的,有些域则不行。
- 深入学习NSUserDefaults/standardUserDefaults
- NSUserDefaults standardUserDefaults
- [NSUserDefaults standardUserDefaults]
- NSUserDefaults standardUserDefaults
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults使用注意事项
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults使用注意事项
- NSUserDefaults standardUserDefaults使用注意事项
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- Unsupported major.minor version 51.0解决办法
- 通过for循环每隔两秒按顺序打印出arr中的数字
- Mysql一
- VS2013编译错误:-D_SCL_SECURE_NO_WARNINGS解决方案
- 《MySQL与MariaDB学习指南》学习笔记2.0
- 深入学习NSUserDefaults/standardUserDefaults
- 获取系统中所有的音频输出设备信息
- layer的使用,open打开框框的关闭
- 输出水仙花数(广义水仙花)
- HDU4006 求集合第K大数(线段树+离散化)
- 关于base64编码的原理及实现
- java输入输出处理(IO流)
- 基于图灵api实现微信聊天机器人
- B1062. 最简分数(20)