主要的技术主要是用到runtime技术和KVO的相关的东西
#import "NSObject+YLRuntime.h"@implementation NSObject
(YLRuntime)- (void)runtimeTakeoutNilValue{
unsigned int outCount = 0; objc_property_t * properties = class_copyPropertyList([self class], &outCount); for (unsigned int i = 0; i < outCount; i ++) { objc_property_t property = properties[i]; //属性名 const char * name = property_getName(property); NSString *getName = [NSString stringWithFormat:@"%s",name]; id value = [self valueForKey:getName]; //属性描述 const char * propertyAttr = property_getAttributes(property); NSString *proArttStr = [NSString stringWithFormat:@"%s",propertyAttr]; if (!value) { if ([proArttStr containsString:@"NSString"]) { // 这个是字符串的情况 [self setValue:@"" forKey:getName]; } else if ([proArttStr containsString:@"NSArray"])
{
[self setValue:@[] forKey:getName];
}
}
}
free(properties);
}
@end