#define IDNUM @"idNum" #define NAME @"name" @interface Student : NSObject <NSCoding> @property (nonatomic, assign) int idNum; @property (nonatomic, copy) NSString *name; @end @implementation Student #pragma mark 编码 对对象属性进行编码的处理 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeInt:_idNum forKey:IDNUM]; [aCoder encodeObject:_name forKey:NAME]; } #pragma mark 解码 解码归档数据来初始化对象 - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { _idNum = [aDecoder decodeIntForKey:IDNUM]; _name = [aDecoder decodeObjectForKey:NAME]; } return self; } @end
小结:
自定义对象与自定义内容归档和解归档步骤和用法完全相同
自定义的对象归档需要实现NSCoding协议,并且实现协议中的方法
NSCoding协议中有两个方法:
encodeWithCoder方法对对象属性进行编码,在对象归档时调用
initWithCoder方法解码归档数据来初始化对象,在对象解归档时调用
总结:
归档和解归档可以用于少量数据的持久化存储和读取
属性列表只能存储Foundation框架中的对象,归档除了可以归档Foundation框架中的对象以外,还可以归档实现了NSCoding协议的自定义对象
通过归档创建的文件是加密的