iOS反射机制: objc_property_t的使用
来源:互联网 发布:原油数据接口 编辑:程序博客网 时间:2024/05/19 14:00
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了!
- iOS反射机制: objc_property_t的使用
- iOS反射机制: objc_property_t的使用
- iOS反射机制: objc_property_t的使用
- 反射机制的使用
- 【反射】反射机制的使用步骤
- Delphi2009 反射机制的使用
- Delphi2009 反射机制的使用
- java反射机制的使用
- Java反射机制的使用
- java 反射机制的使用
- 反射机制的简单使用
- java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- java的反射机制使用
- IOS中自己关于Ivar和objc_property_t的理解,整理下网上资料
- hdu3314(Trouble with Election!)— 并查集
- pomelo+mongo搭建笔记
- Android自动化测试(Jenkins+Robotium+Ant+Junit)[PART one]
- IOS使用CFURLCreateStringByAddingPercentEscapes进行URL编码
- HDU - 1874 - 畅通工程续(最短路,Floyd,图论基础题)
- iOS反射机制: objc_property_t的使用
- 【html】【一个滚动的图片的代码】
- CentOS 5下配置Catcti监控MySQL
- 与String相关的面试题汇总
- spring学习
- SKYLINE uva+线段树+区间的修改+lazy标记
- HDOJ 2002 计算球体积
- fopen()函数的使用(转)
- 网络通讯框架mina和xscocket的简单比较