Preference偏好设置

简介

Preference主要用到NSUserDefaults, NSUserDefaults是一个单例,提供了一个默认的系统编程接口进行交互,一般用来存储应用程序相关的偏好设置,配置数据等,以便于下次启动程序之后能恢复上次的设置。
而且它可以在程序的任何地方存储和读取数据。在运行时,可以使用NSUerDefaults对象读取应用程序的默认数据库来获取数据。
NSUerDefaults具有缓存机制,所以不必再每次读取数据的时候都打开应用程序的默认设置数据库。可以通过synchronize方法来使内存中的缓存与系统默认数据库进行同步。

可存储的数据类型

NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

数据的存储操作

//1.获得NSUserDefaults文件 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; //2.向文件中写入内容 [userDefaults setObject:@"AAA" forKey:@"a"]; [userDefaults setBool:YES forKey:@"sex"]; [userDefaults setInteger:21 forKey:@"age"]; //2.1立即同步 [userDefaults synchronize]; //3.读取文件 NSString *name = [userDefaults objectForKey:@"a"]; BOOL sex = [userDefaults boolForKey:@"sex"]; NSInteger age = [userDefaults integerForKey:@"age"]; NSLog(@"%@, %d, %ld", name, sex, age);

存储自定义对象类型

NSUserDefaults 本身不支持自定义对象的存储, 但是NSUserDefaults可以存储NSData类型,所以在存储自定义类型时,转换成NSData类型来存储。

第一步:自定义对象遵守协议,并实现
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
第二步: 存储、读取

Student *zhang = [[Student alloc]init];
zhang.name = @"ZhangSan";
zhang.age = @"18";
//存储
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:zhang];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:data forKey:@"student"];
[user synchronize];
//读取
NSData *data1 = [user objectForKey:@"student"];
Student *student = [NSKeyedUnarchiver unarchiveObjectWithData:data1];
NSLog(@"%@",student.name);   //输出zhangsan
注意
  • 对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性
  • NSUserDefaults存储的对象全是不可变的. 例如,如果我想要存储一个 NSMutableArray 对象,我必须先创建一个不可变数组NSArray再将它存入NSUserDefaults中去
  • 偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。
  • 如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。
  • 偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。

你可能感兴趣的:(Preference偏好设置)