1.NSUserDefaults 的常见使用
1.轻量级的数据存储,通过UserDefaults进行存储
2.沙盒数据共享,app 使用了iOS 8 以后的程序拓展Extention,我们也可以使用它和宿主App进行数据共享(如,用户信息)
initWithSuiteName: // 通过设置AppGroups
[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xx.xx"];
2.NSUserDefaults 的setValue:forKey/valueForKey:
NSKeyValueCoding(键值编码)是一种协议,简称(KVC),对象采用这种机制来对其属性的间接访问,NSObject对象都可以访问对象的属性。
1.setValue:forKey/valueForKey:
调用时setValue: 可以设置nil传入,但setObject:无法这样使用,编译报错
但是当value为nil的时候,会自动调用removeObject:forKey方法
2.key 必须为NSString类型
3.NSUserDefaults 的setObject:forKey/objectForKey:
- NSUserDefaults的自身实例方法,移除或添加数据时结合synchronize达到快速写入文件的目的
2.setObject:forKey
调用时不能为nil;
key 必须为NSString类型
3.移除key值,需要主动调用removeObject:forKey方法
4.总结
1.两种方式都会写到沙盒plist中
[[NSUserDefaults standardUserDefaults] setValue:@"1111" forKey:@"key1"];
[[NSUserDefaults standardUserDefaults] setObject:@"2222" forKey:@"key2"];
[[NSUserDefaults standardUserDefaults] synchronize];
结论:kvc方式可能也调用了UserDefaults 的写数据方法或重写存数据方法
2.两种方法本质不同
1.setObject:forKey/objectForKey:属于自身方法
2.setValue:forKey/valueForKey:属于KVC协议方法,
3.存取方式
1.避免交叉使用,存setValue:forKey方式,而取值是objectForKey: 反之亦然,导致位置错误
参考地址
KVC和KVO:https://www.jianshu.com/p/7a7c2528c6e7
UserDefaults相似方法: https://www.cnblogs.com/ficow/p/7265162.html
setValue:forKey/和 setObject:forKey区别:
https://blog.csdn.net/weixin_33824363/article/details/91958983
网友评论