解归档通用代码

-(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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容