iOS的归档(archive)和解档(unarchive)

在面向对象的编程中,会涉及到对象的保存,对象的保存在JAVA当中称之为serialize,也叫序列化。而在cocoa当中,这个过程称之为归档。cocoa当中最最典型的序列化例子就是NIB文件的保存和读取过程。 编程

在cocoa当中如何实现了这个功能的哪? spa

其实在cocoa当中是经过了NSCoding协议和NSCoder抽象类共同实现的,对于NSCoder抽象类而言,其实他只是一个抽象类,是不能实例化使用的,而真正使用的是NSCoder的子类,即NSArchiverNSUnarchiverNSKeyedArchiverNSKeyedUnarchiver类的实例对象。 code

那么实现的关键点有两点: 对象

一、要使的须要存储的对象实现NSCoding协议,从而使他本身知足写二进制数据的能力。便是本身具备序列化的能力。 递归

二、使用NSCoder的子类方法,实现二进制数据的动做,如读或者写。即触发存档过程。 it

须要注意的一点就是说,其实对于序列化,是一个“一传十,十传百”的过程,父类的序列化,会逐层递归的将全部的子对象也进行了序列化。此外,序列化,可以序列化的是对象实例和类名,而对于方法实际上是没法序列化的,所以对于序列化和非序列化的类,都须要使用共同的类定义,不然没法还原。 序列化


NSCoding协议的方法: 二进制

-(id)initWithCoder:(NSCoder *)coder; // 读取coder中的数据 方法

-(void) encodeWithCoder:(NSCoder*)coder;// 向coder中写入数据 cocoa


NSKeyArchiver的方法

+(NSData*)archivedDataWithRootObject:(id)rootObject

相关文章
相关标签/搜索