iOS Runtime应用之自动归档

2018-11-02  本文已影响0人  LWide

归档

- (void)encodeWithCoder:(NSCoder *)aCoder 
{
    // 获取类的所有成员变量
    unsigned int count = 0;
    Ivar *ivars = class_copyIvarList([self class], &count);
    for (int i = 0; i < count; i++) {
        // 取得i位置的成员变量
        Ivar ivar = ivars[i];
        const char *name = ivar_getName(ivar);
        NSString *key = [NSString stringWithUTF8String:name];
        [aCoder encodeObject:[self valueForKey:key] forKey:key];
    }
}

解档

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        // 获取类的所有成员变量
        unsigned int count = 0;
        Ivar *ivars = class_copyIvarList([self class], &count);
        for (int i = 0; i < count; i++) {
            // 取得i位置的成员变量
            Ivar ivar = ivars[i];
            const char *name = ivar_getName(ivar);
            NSString *key = [NSString stringWithUTF8String:name];
            [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
        }
    }
    return self;
}

end

上一篇下一篇

猜你喜欢

热点阅读