1.实现NSCoding协议
//NSCoding编码协议,一个对象实现了NSCoding协议方法,才能被转换成为二进制数据。
@interface People : NSObject<NSCoding>
//编码方法,当对象被编码成二进制数据时调用。
-(void)encodeWithCoder:(NSCoder *)aCoder {
//在编码方法中,需要对对象的每一个属性进行编码。
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
[aCoder encodeBool:_sex forKey:@"sex"];
}
//解码方法,当把二进制数据转成对象时调用。
-(instancetype)initWithCoder:(NSCoder *)aDecoder {
//如果父类也遵守NSCoding协议,那么需要写self = [super initWithCoder]
self = [super init];
if (self) {
_name = [[aDecoder decodeObjectForKey:@"name"] copy];
_age = [aDecoder decodeIntForKey:@"age"];
_sex = [aDecoder decodeBoolForKey:@"sex"];
}
return self;
}
//description NSLog输出时显示的内容
-(NSString *)description {
return [NSString stringWithFormat:@"姓名:%@,年龄:%d,性别:%@",_name,_age,_sex?@"男":@"女"];
}
2.写入本地
-
2.1将对象转为data
//一个对象要转化为二进制数据,那么必须保证这个对象本身以及这个对象中所有的属性都能够编码(必须实现NSCoding协议)。 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p]; [data writeToFile:path atomically:NO];
2.2或者直接存入
[NSKeyedArchiver archiveRootObject:p toFile:path];
3.读取
3.1将读取出的data转化成对象
//从文件中读取一段二进制数据
NSDatadata = [NSDatadataWithContentsOfFile:path];
//NSKeyedUnarchiver解码器,能够把二进制数据解码为对象。
Peoplep = [NSKeyedUnarchiverunarchiveObjectWithData:data];3.2或者直接读取
[NSKeyedUnarchiver unarchiveObjectWithFile: path];