归档:将对象按照一定的格式保存到文件中;
解档:从文件中还原对象的过程
官方类的归档与解档方式一:
归档:
Bool ret = [NSKeyedArchiver archiveRootObject:arr toFile: @"/Users/qianfeng/Desktop/arr.archive"];
通过ret来判定是否存档成功
解档方法一:
NSArray * arr1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/arr.archive"];
解档方法二:
NSData *data = [[NSData alloc] initWithContentsOfFile:@"/Users/qianfeng/Desktop/arr.archive"];
NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
官方类的归档与解档方法二:
归档:
//1.创建一个空的二进制数据对象
NSMutableData *mData = [NSMutableData data];
//2.创建归档对象
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mData];
//3.将数据写入归档的对象
[archiver encodeObject:name forKey:@"Name"];
[archiver encodeInteger:age forKey:@"Age"];
[archiver finishEncoding];//4.结束归档
//读取文档数据
NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/test.archive"];
//创建解档对象
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
//根据key值解档数据
NSString *str = [unarchiver decodeObjectForKey:@"Name"];
NSInteger age1 = [unarchiver decodeIntegerForKey:@"Age"];
//结束解档
[unarchiver finishDecoding];
注意:至所以某些官方类能进行归档、解档,是因为他们遵守了NSCoding协议,并实现了其中的方法
@protocol NSCoding
归档的时候自动调用encodeWithCoder
- (void)encodeWithCoder:(NSCoder *)aCoder;
解档的时候自动调用initWithCoder
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
@end
自定义的归档、解档
自定义的归档、解档,需要遵守NSCoding协议,并实现协议中的方法
自定义的归档,就是针对类中的成员变量分别进行归档;
如果自定义类中包含其他的自定义类,其他的自定义类也需要遵守NSCoding协议;