iOS-归档
归档:
数据从内存存储到闪存上 NSKeyedArchiver、NSKeyedUnarchiver
归档后的文件是加密的,所以归档文件的扩展名可以随意取
<一> 对Foundation框架中对象进行归档
NSKeyedArchiver:
采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。
缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。
归档这种保存方式缺点就是没有属性列表(NSuserDefault)速度快,因为它每次都要把文件保存到闪存中,优点是可以创建自己想要的数据模型,然后统一以模型方式存储,比属性列表要过分依赖Key要省心。
NSKeyedArchiver、
NSKeyedUnarchiver
归档:
[NSKeyedArchiver archiveRootObject:Array toFile:filename];
finishDecoding
解压:
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];
finishEncoding
<二> 对自定义的内容进行归档
NSCoding 是一个简单的协议,有两个方法: -initWithCoder: 和 encodeWithCoder:。遵循NSCoding协议的类可以被序列化和反序列化,这样可以归档到磁盘上或分发到网络上。
解码 编码
解档:
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
//解档出数据模型Student
Student *mStudent = [unarchiver decodeObjectForKey:kDataKey];
[unarchiver finishDecoding];//一定不要忘记finishDecoding,否则会报错
归档:
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:saveStudent forKey:kDataKey];
[archiver finishEncoding];
<三> 对自定义的对象进行归档(Bool int float double object)
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:_idNum forKey:IDNUM];
[aCoder encodeObject:_name forKey:NAME];
}
pragma mark 解码 解码归档数据来初始化对象
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
_idNum = [aDecoder decodeIntForKey:IDNUM];
_name = [aDecoder decodeObjectForKey:NAME];
}
return self;
}
http://blog.csdn.net/mad1989/article/details/9106475
http://www.linuxidc.com/Linux/2015-03/115365.htm