1.首先获取一个类的所有属性
{
NSMutableArray *propertyArr = [[NSMutableArray alloc] init];
unsigned int count;
while (class != [NSObject class]) {
objc_property_t *properties = class_copyPropertyList(class, &count);
for(int i = 0; i < count; i++)
{
objc_property_t property = properties[i];
NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
if ([propertyName isEqualToString:@"distace"]) {
continue;
}
[propertyArr addObject:propertyName];
}
if (properties) {
free(properties);
}
//得到父类的消息
class = class_getSuperclass(class);
}
return propertyArr;
2.用kvc对每个属性进行归档解档
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super init];
if (self) {
NSArray *properties = [GetAllPropertyTool getAllPropertyWithClass:[self class]];
for (NSString *property in properties) {
@try {
[self setValue:[coder decodeObjectForKey:property] forKey:property];
}
@catch (NSException *exception) {
}
@finally {
}
}
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
NSArray *properties = [GetAllPropertyTool getAllPropertyWithClass:[self class]];
for (NSString *property in properties) {
@try {
[coder encodeObject:[self valueForKey:property] forKey:property];
}
@catch (NSException *exception) {
}
@finally {
}
}
}