如网络Json数据会组成NSDictionary

iOS反射机制: objc_property_t的使用

金沙网址,iOS属性反射:说白了,正是将三个对象的装有属性,用动态的艺术收取来,并基于属性名,自动绑值。(注意:对象的类,假如是派生类,就得靠其余艺术来落到实处了,因为获得不应当基类的质量。)

常用的反射方式,有如下二种:

从一个自定义实体类->自定义实体类

从多个NSDictionary->自定义实体类(此办法最最常用,如互联网Json数据会组成NSDictionary。sqlite查询数据,能够用第三方组件组成NSDictionary)
直接上码,(这里码在NSObject体系中)
得到对象具有属性:

  • (NSArray*)propertyKeys

{

unsigned int outCount, i;

objc_property_t *properties = class_copyPropertyList([self class],
&outCount);

NSMutableArray *keys = [[NSMutableArray alloc]
initWithCapacity:outCount];

for (i = 0; i < outCount; i++) {

objc_property_t property = properties[i];

NSString *propertyName = [[NSString alloc]
initWithCString:property_getName(property)
encoding:NSUTF8StringEncoding];

[keys addObject:propertyName];

}

free(properties);

return keys;

}

  • (BOOL)reflectDataFromOtherObject:(NSObject*)dataSource

{

BOOL ret = NO;

for (NSString *key in [self propertyKeys]) {

if ([dataSource isKindOfClass:[NSDictionary class]]) {

ret = ([dataSource valueForKey:key]==nil)?NO:YES;

}

else

{

ret = [dataSource respondsToSelector:NSSelectorFromString(key)];

}

if (ret) {

id propertyValue = [dataSource valueForKey:key];

//该值不为NSNULL,並且也不为nil

if (![propertyValue isKindOfClass:[NSNull class]] &&
propertyValue!=nil) {

[self setValue:propertyValue forKey:key];

}

}

}

return ret;

}

/////使用办法
NSDictionary *dicJsonData;

EntityObject *objValue;

[objValue reflectDataFromOtherObject:dicJsonData];
//那样就足以做到指标的活动赋值了,

//你还在动用下边的措施呢?

objValue.value = [dicJsonData objectForKey:@”value”];

//out了!

: objc_property_t的利用
iOS属性反射:说白了,正是将两个指标的兼具属性,用动态的法子抽出来,并根据属性名,自动绑。(注意…

相关文章