对知识点的进一步加强,同时也能对新入门iOS的童鞋们有点帮助。
一.NSUserDefault
1.原理:NsUserDefault是用户轻量级的数据持久化,主要用于保存用户程序的配置等信息,以便下次启动程序后能恢复上次的设置。因为是写到了硬盘上,所以会出现用多了会造成系统浪费,内存占用过大等问题。
(1)、该数据实际上是以“键值对”形式保存的(类似于NSDictionary),因此我们需要通过key来读取或者保存数据(value)。
(2)、NSUserDefaults类提供了非常方便的方法来获取常用的类型,例如floats,doubles,intergers,Booleans,URLs。所以这也就是说我们可以存储NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary(目前有五种类型)这些实例。如果你想存储其他类型的对象,你要将其归档并创建一个NSData来实现存储。
(3)、从NSUserDefaults返回的值是不可改变的,即便是你在存储的时候使用的是可变的值。例如你使用mutable string做为“MyStringDefault”的值,当你做使用stringForKey:方法获取的值,这个值仍然是不可变的。
(4)、NSUserDefaults是单例,同时也是线程安全的
2为什么要选用NSUserDefault?
(1).NSUserDefaults只是一个很小的plist文件,适合存储轻量级的本地数据,不适宜存储大量数据,一般用来保存用户信息,偏好设置等小量数据.
(2).NSUserDefaults支持的数据格式有限,只支持简单地数据格式,具体有 NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL等常见类型,复杂对象就不能用它了.
(3).NSUserDefualts设计为单例模式,所以具有拿来即用的优点. NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
3.NSUserDefault 存储在什么地方?如何删除?
NSUserDefault存储在沙盒目录:
NSArray*paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString*path = [pathsobjectAtIndex:0];
NSLog(@"%@",path);
我这里获取的路径:
/Users/XXXX/Library/Developer/CoreSimulator/Devices/D2122BB0-3E08-4475-B5B4-9122EE865864/data/Containers/Data/Application/5C3554DF-9902-4115-BE10-DB3C8F826E43/Documents
用这个去前往文件夹 可直接到沙盒目录,而我们的NSUserDefault是在Library/Preferences/xxxx.plist
删除NSUserDefault 数据有两种方法:
1.在代码中获取到单例对象后remove
NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];
[defaultsremoveObjectForKey:@"xx"];
2.直接在沙盒中删除plist文件
demo:“https://github.com/wasterd/NSUserDefaultDemo/tree/master”
网友评论