iOS基础

解归档通用代码

2018-05-04  本文已影响9人  阿洋12138
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    unsigned int count = 0;

    Ivar *Ivars = class_copyIvarList([self class], &count);

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

        Ivar ivar = Ivars[i];

        const char *name = ivar_getName(ivar);

        NSString *key = [NSString stringWithUTF8String:name];

        id value = [self valueForKey:key];

        [aCoder encodeObject:value forKey:key];

    }

    free(Ivars);
}
- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super init];

    if (self) {

        unsigned int count = 0;

        Ivar *Ivars = class_copyIvarList([self class], &count);
        
        for (int i = 0; i<count; i++) {

            Ivar ivar = Ivars[i];

            const char *name = ivar_getName(ivar);

            NSString *key = [NSString stringWithUTF8String:name];

            id value = [coder decodeObjectForKey:key];

            [self setValue:value forKey:key];

        }

        free(Ivars);

    }

    return self;
}
上一篇 下一篇

猜你喜欢

热点阅读