1.将任何对象,或数据结构转换为NSData类对象的过程,成为归档,亦称之为数据的序列化
2.解归档,首先要确保你有同样的数据结构来接收解归档的数据
需要归档的数据结构中,任何对象都必须遵从NSCoding,实现协议方法
- (void)encodeWithCoder:(NSCoder *)aCoder; // 归档时调用,
- (id)initWithCoder:(NSCoder *)aDecoder; // 解归档时调用
使用KeyedAchiever进行归档,使用KeyedUnAchiever进行解归档
注:多层数据结构嵌套是时归档要进行深拷贝,即,如果要归档的对象中有子对象,子对象应该继续归档,以下为例:
WWCClass类中有一个WWCStudent对象,存储在WWCClass类中的一个数组中,对WWCClass类归档时如下结构
类WWCClass类Student:
@implementation
- (void)encodeWithCoder:(NSCoder
{
}
- (id)initWithCoder:(NSCoder
{
}
类WWCStudent:
@interface WWCStudent : NSObject
@property (copy) NSString * name;
@property (copy) NSString * ID;
@property NSUInteger age;
@end
@implement WWCStudent
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
}
main 函数
归档:
WWCClas *student = [[WWCClas alloc] init];
[student addStudent]; // 此函数是为student添加数据
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *achiver
= [[NSKeyedArchiver alloc]
initForWritingWithMutabl
[achiver encodeObject:student forKey:@"student"];
[achiver finishEncoding];
[data writeToFile:PATH atomically:YES];
解归档
NSData *data = [NSData dataWithContentsOfFile:PATH];
NSKeyedUnarchiver *unchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
WWCClas * student = [[unchiver decodeObjectForKey:@"student"] retain];
[unchiver finishDecoding];