利用runtime归解档

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

if (self = [super init]) {

unsigned int count = 0;

//获取类中所有成员变量名

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

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

Ivar iva = ivar[i];

const char *name = ivar_getName(iva);

NSString *strName = [NSString stringWithUTF8String:name];

//进行解档取值

id value = [aDecoder decodeObjectForKey:strName];

//利用KVC对属性赋值

[self setValue:value forKey:strName];

}

free(ivar);

}

return self;

}

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

unsigned int count;

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

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

Ivar iv = ivar[i];

const char *name = ivar_getName(iv);

NSString *strName = [NSString stringWithUTF8String:name];

//利用KVC取值

id value = [self valueForKey:strName];

[aCoder encodeObject:value forKey:strName];

}

free(ivar);

}

你可能感兴趣的:(利用runtime归解档)