iOS关于对象序列化

1.实现NSCoding协议

//NSCoding编码协议,一个对象实现了NSCoding协议方法,才能被转换成为二进制数据。
@interface People : NSObject

//编码方法,当对象被编码成二进制数据时调用。
-(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解码器,能够把二进制数据解码为对象。
    People
    p = [NSKeyedUnarchiverunarchiveObjectWithData:data];

  • 3.2或者直接读取
    [NSKeyedUnarchiver unarchiveObjectWithFile: path];

你可能感兴趣的:(iOS关于对象序列化)