归档是指用某种格式来保存一个或者多个对象,以便以后还原这些对象的过程。
使用xml属性列表进行归档
如果你是对NSString,NSDictionary,NSArray,NSData,NSNumber对象进行归档,可以使用类中实现的writeToFile:atomically:方法将数据写到文件中。
使用dictionaryWithContentsOfFile 或者arrayWithContentsOfFile,dataWithContentsOfFile,stringWithContentsOfFile方法读回数据。
使用NSKeyedArchiver归档
将各种类型的对象存储到文件中,不仅仅是字符串、数组和字典,有一种更灵活的方法,就是NSKeyedArchiver类创建带键的档案来完成。
带键的档案中,每个归档的字段都有一个名称。归档某个对象时,为它提供一个名称,即键。从归档中检索对象时,是根据这个键来检索的。
编码方法和解码方法
自定义的类对象不能直接归档。因为系统不知道如何进行归档。
按照<NSCoding>协议,在类中添加encodeWithCoder方法和initWithCoder方法实现归档规范。
encodeWithCoder方法告知归档程序如何进行归档。initWithCoder方法告知如何解编码。
前面描述的基本oc类,可以使用encodeObject:forKey进行编码,decodeObject:forKey来解码,对于基本的C类型使用如下方法
编码方法 | 解码方法 |
encodeBool:forKey: | decodeBool:forKey: |
encodeInt:forKey: | decodeInt:forKey: |
encodeInt32:forKey: | decodeInt32:forKey: |
encodeInt64:forKey: | decodeInt64:forKey: |
encodeFloat:forKey: | decodeFloat:forKey: |
encodeDouble:forKey: | decodeDouble:forKey: |
来个例子:
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:@"tongxue" forKey:@"name"];
[coder encodeInt:13 forKey:@"age"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSString * name = [aDecoder decodeObjectForKey:@"name"];
int age = [aDecoder decodeIntForKey:@"age"];
return self;
}