在IOS中,我们经常会把对象、集合装换成NSData类型,以便于更好的数据存储和数据处理。
eg: NSArray *array = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc"]
NSData *data02 = [NSKeyedArchiver archivedDataWithRootObject:array];//通过归档对NSArray进行转码,保存了数组的序列
但是,我们仅仅只能对原生的类进行归档处理,当对自定义的类进行归档时,无法保存对象,只是需要在自定义类中实现NSCoding协议。原来所有原生的类都是实现了NSCoding协议,在归档的过程中进行了转码,所以才可以归档成功。
NSCoding协议介绍
NSCoding协议中只有两个方法 都是require的方法,一个是把本身的类进行转码,一个是逆转码成类对象,返回一个对象。
- (void)encodeWithCoder:(NSCoder
@interfaceStudentDoc : NSObject<NSCoding>
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *ID;
-(Student *)initWithName :(NSString*)newName
@end
Student类需要实现协议NSCoding,.m文件中是这样的:
@implementationStudent
@synthesize name = _name,ID = _ID;
//初始化学生类
-(Student *)initWithName:(NSString *)newName and:(NSString *)newID{
}
//学生类内部的两个属性变量分别转码
-(void)encodeWithCoder:(NSCoder *)aCoder{
}
//分别把两个属性变量根据关键字进行逆转码,最后返回一个Student类的对象
-(id)initWithCoder:(NSCoder *)aDecoder{
}
@end
自定义类Student实现了NSCoding协议以后,就可以进行归档转换了,具体实现: