美文网首页
iOS关于对象序列化

iOS关于对象序列化

作者: 米奈希尔 | 来源:发表于2016-11-12 11:44 被阅读0次

    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解码器,能够把二进制数据解码为对象。
      People
      p = [NSKeyedUnarchiverunarchiveObjectWithData:data];

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

    相关文章

      网友评论

          本文标题:iOS关于对象序列化

          本文链接:https://www.haomeiwen.com/subject/qlhzyttx.html