序列化与反序列化

归档即序列化与反序列化

NSCoding是一个协议,主要是下面两个方法

  • -(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据

  • -(void)encoderWithCoder:(NSCoder *)coder;//读取实例变量,并把这些数据写到coder中去。

NSCoder是一个抽象类,抽象类不能被实例化,只能提供一些想让子类继承的方法
NSKeyedUnarchiver 从二进制流读取对象
NSKeyedArchiver 把对象写到二进制流中去

如下,在ZYRestaurant定义了如下这些属性


@interface ZYRestaurant : NSObject<NSCoding>

@property (nonatomic,copy) NSString *shopID;
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *discount;
@property (nonatomic,copy) NSString *address;

@end

在ZYRestaurant.m里面实现如下这些方法

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        _shopID = [aDecoder decodeObjectForKey:@"shopid"];
        _title = [aDecoder decodeObjectForKey:@"title"];
        _discount = [aDecoder decodeObjectForKey:@"discount"];
        _address = [aDecoder decodeObjectForKey:@"address"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.shopID forKey:@"shopid"];
    [aCoder encodeObject:self.title forKey:@"title"];
    [aCoder encodeObject:self.discount forKey:@"discount"];
    [aCoder encodeObject:self.address forKey:@"address"];
}

Previous     Next