</pre><pre name="code" class="objc"><pre name="code" class="objc">// NSUserDefaults类提供了一个与默认系统进行交互的编程接口,
// NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等。
// 默认系统允许应用程序自定义它的行为去迎合用户的喜好,
// 可以在程序运行的时候从用户默认的数据库中读取程序的设置,比如主题偏好设置等
// 同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作,可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。
// 一个NSUserDefaults类的对象必须是属性表
//我们可以存储NSData NSString NSNumber NSDate NSArray NSDictionary 这些实例
// 如果我们想存储其他类型的对象,需要归档并创建一个NSData来实现存储。
// 1. 存储
/*
NSString *password = @"helloworld";
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"];
[[NSUserDefaults standardUserDefaults] synchronize];
*/
// 2. 获取
// NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"];
// NSLog(@"password : %@",password);
// 2015-08-26 13:32:35.027 NSUserDefault[7986:303] password : helloworld
// ----
// 从上面的例子得到了结论,只需要将需要存储的数据给NSUserDefaults 然后调用同步方法,再次启动程序,就可以获取NSUserDefaults的数据。
// 使用 NSUserDefaults 存储自定义对象
// Student ,我们需要将Student类型变为NSData类型 就必须实现归档 自定义对象实现归档必须遵循NSCoding协议。
// Student *student = [[Student alloc] init];
// student.name = @"Charles";
// student.studentNumber = @"12110501007";
// student.sex = @"man";
// // 归档方法
+ (NSData *)archivedDataWithRootObject:(id)rootObject;
// // 1. 存储
// /*
// NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
// [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"studentData"];
// [[NSUserDefaults standardUserDefaults] synchronize];
// */
// 解档方法
// + (id)unarchiveObjectWithData:(NSData *)data;
// // 2. 获取
// id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"studentData"];
// // 我们打印一下这时候获取的真实类型是什么?
// NSLog(@"obj : %@",NSStringFromClass([obj class]));
obj : __NSCFData
我们需要解归档。 将NSData数据转化为 student对象
// Student *getStudent = [NSKeyedUnarchiver unarchiveObjectWithData:obj];
// NSLog(@"getStudent : %@",getStudent);
getStudent : name :Charles studentNumber :12110501007 sex :man
// 归档解档
NSArray *array = @[@"1",@"2"];
NSMutableData *mulData = [NSMutableData data];
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mulData];
[keyedArchiver encodeObject:array forKey:@"array"];
[keyedArchiver finishEncoding];
[mulData writeToFile:@"/Users/ms/Desktop/FileManager/file.txt" atomically:YES];
// /Users/ms/Desktop/FileManager/file.txt
@interface Student () <NSCoding>
@end
@implementation Student
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.studentNumber forKey:@"studentNumber"];
[aCoder encodeObject:self.sex forKey:@"sex"];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.studentNumber = [aDecoder decodeObjectForKey:@"studentNumber"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name :%@ studentNumber :%@ sex :%@", _name,_studentNumber,_sex];
}