iOS屬性反射:就是將對象的所有屬性,用動態(tài)的方式取出來,并根據(jù)屬性名,自動綁值。
- (NSArray*)propertyKeys
{
unsignedintoutCount, i;
objc_property_t*properties =class_copyPropertyList([selfclass], &outCount);
NSMutableArray*keys = [[NSMutableArrayalloc]initWithCapacity:outCount];
for(i =0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString*propertyName = [[NSStringalloc]initWithCString:property_getName(property)encoding:NSUTF8StringEncoding];
[keys addObject:propertyName];
}
free(properties);
returnkeys;
}
- (BOOL)reflectDataFromOtherObject:(NSObject*)dataSource
{
BOOLret =NO;
for(NSString*key in ?[self propertyKeys]) {
if([dataSource ?isKindOfClass:[NSDictionary class]]) {
ret = ([dataSource valueForKey:key]==nil)?NO:YES;
}
else{
ret = [dataSourcerespondsToSelector:NSSelectorFromString(key)];
}
if(ret) {
id propertyValue = [dataSource valueForKey:key];
//該值不為NSNULL,并且也不為nil
if(![propertyValue isKindOfClass:[NSNull class]] && propertyValue!=nil) {
[self setValue:propertyValue forKey:key];
}
}
}
returnret;
}
/////使用方法
NSDictionary*dicJsonData;
EntityObject*objValue;
[objValue ?reflectDataFromOtherObject:dicJsonData];//這樣就可以完成對象的自動賦值了,