(书中的定义)归档就是用某种格式来保存一个或多个对象,以便以后还原这些对象
(复杂的说法)面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络传输或写入文件中。也就是序列化和反序列化的过程,因此有编码和解码的过程。
一般有两种归档的方式:属性列表(XML文件,plist文件)和带键值的编码
1.属性列表以键值对的形式存储数据。键一定是NSString对象,值可以是NSString,NSArray,NSDictionary,NSData,NSDate,NSNumber对象。
这种方式缺点是首先受到保存对象类型的限制,其次保存的对象并没有保存对应的类,以及引用次数等类的信息,所以保存的对象信息有限(不能重建类图)
2.使用NSKeyedArchiver归档.
使用这种方式的前提是类实现了NSCoding协议中的encodeWithCoder:(NSCoder *)encoder方法和initWithCoder:(NSCoder *)decoder方法。
oc基本的类对象都做了实现。自定义的类需要自己实现。
编码方法的内容就是指定如何保存类的所有实例变量,包括实例变量名称-内存大小-编码名称。
解码方法和编码是一个反向的过程。总的说来就是对象《-》二进制流之间的序列化和反序列化
(1)1个对象-编码类-1个文件 一个对象存入一个文件
(2)多个对象-1个编码对象-1个NSData数据区-1个文件 多个对象编码后存入一个文件
3.通过归档复制对象
对象通过编码->data->解码得到对象 通过编码可以创建对象的完全复制(多层深复制)