对象归档

当一个要归档的对象的属性很少的时候 对象遵守NSCoding 协议 对对象进行归档和解档

// 解档属性

- (instancetype)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {

//        _name = [aDecoder decodeObjectForKey:@"name"];

//        _age = [aDecoder decodeIntForKey:@"age"];

    }

    return self;

}

 // 归档属性

- (void)encodeWithCoder:(NSCoder *)aCoder{

//    [aCoder encodeObject:_name forKey:@"name"];

//    [aCoder encodeInt:_age forKey:@"age"];

}


当一个要归档的对象的属性很多的时候,一一写代码会很麻烦 对对象进行归档和解档

#import <objc/message.h>

// 解档属性

- (instancetype)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {

        unsigned int count = 0; // 对象的属性的个数

        Ivar *arr = class_copyIvarList([要存的对象 class], &count);

        for (int i = 0; i<count; i++) {

            Ivar thevar = arr[i];

            const char *name = ivar_getName(thevar);

            NSString *key = [NSString stringWithUTF8String:name];// 对象的属性名

            id value = [aDecoder decodeObjectForKey:key];

            [self setValue:value forKey:key];

        }

        free(ivars);// c语言需要释放指针

    }

    return self;

}

 // 归档属性

- (void)encodeWithCoder:(NSCoder *)aCoder{

    unsigned int count = 0;

    Ivar *arr = class_copyIvarList([要存的对象 class], &count);

    for (int i = 0; i<count; i++) {

        Ivar thevar = arr[i];

        const char *name = ivar_getName(thevar);

        NSString *key = [NSString stringWithUTF8String:name];

        [aCoder encodeObject:[self valueForKey:key] forKey:key];

    }

    free(ivars);// c语言需要释放指针

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值