1.偏好设置简介
- 用NSUserDefaults存储的数据下次程序运行的时候依然存在,那么它把数据存储在什么地方了呢?其实它存储在应用程序内置(沙盒)的一个plist文件里,这个可以根据路径看到。
![6B2C8AD6-538B-4A41-98B8-36CFD8E76D65](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2015/12/6B2C8AD6-538B-4A41-98B8-36CFD8E76D65.jpg)
- 既然它是存储在一个plist文件里的,那么它自然也就是以键值对的方式存在的,它的存储形式其实就是一种XML格式的文件:
![20150721113710564](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2015/12/20150721113710564.png)
2.偏好设置的使用
- 使用偏好设置对数据进行保存之后, 它保存到系统的时间是不确定的,会在将来某一时间点自动将数据保存到Preferences文件夹下面,如果需要即刻将数据存储,必须使用[defaults synchronize]
- 想要实现自定义对象的存储,需要将该对象转化为NSData类型,再进行保存
- //获取NSUserDefaults对象
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- //保存数据
- [defaults setObject:@"jack" forKey:@"name"];
- [defaults setInteger:20 forKey:@"age"];
- [defaults setBool:YES forKey:@"sex"];//YES表示性别为男性
- //同步数据
- [defaults synchronize];
- //获取NSUserDefaults对象
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- //读取数据(类型需要与存储时保持一致)
- NSString *name = [defaults objectForKey:@"name"];
- NSInteger age = [defaults integerForKey:@"age"];
- BOOL sex = [defaults boolForKey:@"sex"];
![63CAF876-5CA3-44D8-AC80-FE0899E2FFD1](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2015/12/63CAF876-5CA3-44D8-AC80-FE0899E2FFD1.jpg)
- //删除数据
- [defaults removeObjectForKey:@"sex"];
- 使用注意:偏好设置是专门用来保存应用程序的配置信息的, 一般情况不要在偏好设置中保存其他数据。如果利用系统的偏好设置来存储数据, 默认就是存储在Preferences文件夹下面的,偏好设置会将所有的数据都保存到同一个文件中。针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。