1、把任何类型的数据经过一定的加工 归档 最终能够存储起来
2、自定义了一个类 Class 创建了数据 怎么存起来 -> 二进制数据
归档的作用 能够把我们自己创建的类 存储起来 压缩的过程
解归档 就是把我们已经归档了的数据 再逆转回来 解压的过程
<NSCoding协议> 并且实现两个方法
//归档的时候 使用的方法 使用归档器 来进行操作
-
(void)encodeWithCoder:(NSCoder *)aCoder
{
//归档 实质 是给 类的成员变量 进行归档
//使用归档器来进行归档
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInteger:_age forKey:@"age"];
[aCoder encodeObject:_ID forKey:@"ID"];
}
//解归档的时候 使用的方法 使用解归档器 进行解归档 -
(instancetype)initWithCoder:(NSCoder *)aDecoder
{
//把归档了的成员变量都进行解归档
self = [super init];
if (self) {
_name =[aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntegerForKey:@"age"];
_ID = [aDecoder decodeObjectForKey:@"ID"];
}
return self;
}
Student * laoWang = [[Student alloc]initWithAge:12 Name:@"laoWang" ID:@"010101"];//现在我们把 这个对象进行归档 //归档 NSMutableData * data = [[NSMutableData alloc]init]; //把归档的数据都写到data里面 NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; //归档器里面可以存放多个数据 [keyed encodeObject:laoWang forKey:@"laoWang"]; [keyed finishEncoding]; //data已经拿到了老王的所有数据 [data writeToFile:@"/Users/apple/Desktop/a" atomically:YES]; //解归档 NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"]; [unKeyed finishDecoding]; NSLog(@"%@",someOne);
//main中归档解归档
//把归档的数据都写到data里面
NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
//归档器里面可以存放多个数据
[keyed encodeObject:laoWang forKey:@"laoWang"];
[keyed finishEncoding];
//data已经拿到了老王的所有数据
[data writeToFile:@"/Users/apple/Desktop/a" atomically:YES];
//解归档
NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"];
[unKeyed finishDecoding];
二、多个对象的归档 如果有关系
Class Student
Class 有 Student
不仅让Class类 遵守Coding协议 Student也遵守Coding协议
网友评论