待填充
encodeWithCoder
将对象进行归档存储时,需要遵循NSCoding协议,对象必须实现encodeWithCoder方法和initWithCoder方法用于对象的编码和解码。
缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。没有属性列表(NSuserDefault)速度快,因为它每次都要把文件保存到闪存中,
优点:可以创建自己想要的数据模型,然后统一以模型方式存储,比属性列表要过分依赖Key要省心。
NSKeyedArchiver、
NSKeyedUnarchiver
归档:
[NSKeyedArchiver archiveRootObject:(id)obj toFile:filename];
解压:
id obj = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];
<二> 对自定义的对象进行归档
NSCoding 是一个简单的协议,有两个方法: -initWithCoder: 和 encodeWithCoder:。遵循NSCoding协议的类可以被序列化和反序列化,这样可以归档到磁盘上或分发到网络上。
//对自定义的对象进行归档(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;
}