一、 NSKeyedArchiver(归档)采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。
// -------------遵循协议后必须实现的两个方法--------------
//1,编码。编码的是属性(对应于归档的时候)(序列化)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
//需要对每一个属性就行编码
[aCoder encodeObject:self.name forKey:@"name"];//1,随便起名,但是必须跟下面的对应
[aCoder encodeObject:self.sex forKey:@"sex1"];
}
//2,解码。(对应的是反归档的时候)(反序列化)
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
//将编码好的数据,反编码回到本身的属性上
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex1"];//2,必须跟上面的对应一样
}
return self;
}
//-------归档步骤
//1,有一个遵守了NSCoding协议的复杂对象
//2,初始化对象
//3,创建一个NSMutableData
//4,使用NSMutableData初始化归档工具NSKeyedArchiver
//5,通过工具NSKeyedArchiver将复杂对象编码到NSMutableData里面
//6,结束编码
//7,将NSMutableData写入本地
//-------反归档步骤
//1,通过路径拿到NSData数据(里面存放的是Person复杂对象跟key值)
//2,通过NSData初始化一个反归档工具NSKeyedUnarchiver
//3,通过key值拿到编码的对象,把编码好的数据反编码到本身的属性上
//4,通过初始化一个Person类,通过key值接收解档后的数据
//5,结束反归档
二、 NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的简单数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。(版本号,是否首次登陆,存储的是登陆之后的用户名和用户信息)
//存值
NSUserDefaults *user1 = [NSUserDefaults standardUserDefaults];
[user1 setObject:@"名字" forKey:@"name"];
//取值
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];NSLog(@"%@",[user objectForKey:@"name"]);
三、 Write写入方式:永久保存在磁盘中。(直接写入本地,遵守了NSCoding协议Foundation框架下的简单对象:NSString、NSArray、NSDictionary、NSData二进制对象)
1,二进制对象可能存储的是图像、字符串等等
2,创建写入的地址,后面拼接文件名,如果没有的话,会自动创建,如果有,直接写入,文件的格式没什么用
注意:
1,直接写入本地的时候,第一次写入之后,如果再次对同一个文件进行写入操作,会覆盖前面的数据
2, 一次只能写入一条数据(这是当一次需要写入大量数据时用数组写入的原因)
3,如果不想覆盖,就先读出来,然后一起再写进去
4,所有能够直接写入本地的,一定要遵守NSCoding协议
iOS 只有 NSString、NSArray、NSDictionary、NSData(以及它们对应的可变量)可以直接在沙盒写入,其他的一概不能直接写入----而且数组或者字典等这些容器里面存储的数据必须是上述数据-------
NSCoding + NSKeyedArchiver实现复杂对象的存储。