Archiver 浅析

时间:2023-03-09 09:28:04
Archiver 浅析

归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象。通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象。

两种归档数据的方法:属性列表和带键值的编码。

属性列表局限性很大,一般不适用。

-)使用NSKeyedArchiver归档

若要将各种内置类型的对象存储到文件中,不仅仅是NSString、NSArry,NSDictionary,NSSet、NSDate、NSNumber和NSData,还有他们之间的组合,利用NSKeyedArchiver归档是一种灵活的方法。这些内置数据类型都已经实现<NSCoding>协议。

二)使用NSData创建自定义归档

如果要归档自定义的数据类型,那就要在要在类定义中添加编码encodeWithCoder:方法和initWithCoder:解码方法,以实现<NSCoding >协议。编码方法应该指定如何归档想要保存的对象中的每个实例变量。对于基本的C数据类型,和对象类型都是有对应的编码解码方法。这个可以查,比如对象型decodeObject:forKey:来解码基本的Object-C类。

如果要存储所有的对象,就可以用NSData通用数据流对象类。这也是最具有通用性的方法。

使用的步骤:

第一步:确保要归档的每个自定义类都实现了<NSCoding>协议,(内置类已经已经实现,不需要担心);

第二步:设置数据区,并将其连接到一个NSKeyedArchiver对象

NSData  *data=[NSMutableData  data]

NSKeyedArchiver *archiver=[[NSkeyedArchiver alloc ] initForWritingMutableData:data];

第三步:归档

[arhiver ecodeObject:id forkey:@""];

........

[archiver finishEncoding];

第四步:将存档的数据区写入文件中。

例如:

[[NSUserDefaults standardUserDefaults] setObjet:data forKey:@""];

反过来也是一样;取得文件中归档数据,解码就可以了。