归档和解归档除了用于NSString、NSNumber、NSArray、NSDictionary等对象和NSData之间的转换(见
NSData和NSMutableData),还可以用来保存别的对象,如保存界面上的view对象。
对象归档必须做两件事情:
1.对象必须遵守NSCoding协议
2.在对象中实现该协议的两个方法
//
属性编码
- (void)encodeWithCoder:(NSCoder
*)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
//
属性解码
- (id)initWithCoder:(NSCoder
*)aDecoder{
self = [superinit];
if (self)
{
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
returnself;
}
NSString、NSNumber、NSArray、NSDictionary以及UIView默认遵守了NSCoding协议。
// 一、归档
NSArray *names = @[@“A",@“B",@“C",@“D"];
// 1.准备一个可变的data
NSMutableData *data = [NSMutableDatadata];
// 2.创建归档对象
NSKeyedArchiver *arch = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
// 3.把对象编码进去
[arch encodeObject:namesforKey:@"names"];
// 4.完成编码
[arch
finishEncoding];
// 5、写入文件
[data
writeToFile:@"/Users/tarena/Desktop/names"atomically:YES];
// 二、解归档
// 1、读入文件
NSData *data = [NSData dataWithContentsOfFile:@"/Users/tarena/Desktop/names"];
// 2、创建反归档对象
NSKeyedUnarchiver *unArch = [[NSKeyedUnarchiveralloc]initForReadingWithData:data];
// 3、解码
NSArray *names = [unArch decodeObjectForKey:@"names"];
归档和解归档
原文:http://blog.csdn.net/debolee/article/details/44655873