iOS的encodeWithCoder

待填充

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;

}


你可能感兴趣的:(iOS的encodeWithCoder)