iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值一、获取Model的实体属性1.要想遍历Model类的属性,首先得通过Runtime来获取该Model类有哪些属性,输出Model的所有属性的值可不像遍历Dictionary和Array那样一个for循环搞定的,下面的方法是通过Runtime来获取Model类的属性字符串,并以数组的形式返回。代码如下:///通过运行时获取当前对象的所有属性的名称,以数组的形式返回?-?(NSArray?*)?allPropertyNames{?///存储所有的属性名称?NSMutableArray?*allNames?=?[[NSMutableArray?alloc]?init];??///存储属性的个数?unsigned?int?propertyCount?=?0;??///通过运行时获取当前类的属性?objc_property_t?*propertys?=?class_copyPropertyList([self?class],?propertyCount);??//把属性放到数组中?for?(int?i?=?0;?i??propertyCount;?i?++)?{?///取出第一个属性?objc_property_t?property?=?propertys[i];??const?char?*?propertyName?=?property_getName(property);??[allNames?addObject:[NSString?stringWithUTF8String:propertyName]];?}??///释放?free(propertys);??return?allNames;?}?2.获取到Model类的属性方法后需要把属性字符串生成get方法,我们可以执行get方法来获取Model属性的值,下方的方法是根据属性字符串来获取属性的getter方法,OC中属性的getter方法的名字和属性的名字是一致的,生成getter方法比较简单,具体代码如下:#pragma?mark?--?通过字符串来创建该字符串的Setter方法,并返回?-?(SEL)?creatGetterWithPropertyName:?(NSString?*)?propertyName{??//1.返回get方法:?oc中的get方法就是属性的本身?return?NSSelectorFromString(propertyName);?}?二、Get方法的执行接下来要做的是通过Runtime来执行Getter方法,这一块需要通过方法的签名来执行Getter方法。在OC的运行时中要执行的方法需要传入参数或者需要接收返回值时,需要通过方法的签名来调用方法。下面的代码就是创建方法的签名,然后通过签名来获取调用的对象,在下边的方中回调用上述两个方法在通过方法的签名来获取Model属性的值,具体代码如下:-?(void)?displayCurrentModleProperty{??//获取实体类的属性名?NSArray?*array?=?[self?allPropertyNames];??//拼接参数?NSMutableString?*resultString?=?[[NSMutableString?alloc]?init];??for?(int?i?=?0;?i??array.count;?i?++)?{??//获取get方法?SEL?getSel?=?[self?creatGetterWithPropertyName:array[i]];??if?([self?respondsToSelector:getSel])?{??//获得类和方法的签名?NSMethodSignature?*signature?=?[self?methodSignatureForSelector:getSel];??//从签名获得调用对象?NSInvocation?*invocation?=?[NSInvocation?invocationWithMethodSignature:signature];??//设置target?[invocation?setTarget:self];??//设置selector?[invocation?setSelector:getSel];??//接收返回的值?NSObject?*__unsafe_unretained?returnValue?=?nil;??//调用?[invocation?invoke];??//接收返回值?[invocation?getReturnValue:returnValue];??[resultString?appendFormat:@%@\n,
您可能关注的文档
- hanyiwen-20140523修改.doc
- 人教版_一年级下_语文课件《识字六》上课用资料.ppt
- 人教版_一年级语文下册识字六资料.ppt
- 人教版_鱼儿游游资料.ppt
- HC1109105_HCNA-Storage V2_BSSN_第五章 SAN技术及应用.pptx
- HCKJ-TR-01 抗氢诱导开裂(R-HIC)钢制压力容器制造及验收工程技术条件.doc
- 人教版_语文五年级下册第19课草船借箭课件资料.ppt
- 人教版_圆的面积资料.ppt
- 人教版《赤壁赋》(共44张)资料.ppt
- HDF突发静脉痉挛的护理体会.pptx
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
最近下载
- 深度解析(2026)《GBT 6398-2017金属材料 疲劳试验 疲劳裂纹扩展方法》(2026年)深度解析.pptx VIP
- 2025浙江绍兴越城区初升高自主招生数学试卷试题(含答案详解).docx VIP
- 大数据在桥梁结构健康监测中的应用研究.docx VIP
- catti二级笔译日语真题及答案2025.doc VIP
- 电工类本科国网考试注意事项及复习方法 .pdf VIP
- EHS100系列电液伺服使用说明书V1.5.pdf VIP
- 2024年国网北京公司考试真题.docx VIP
- 2025年甘肃省嘉峪关市中考英语试卷.docx
- 补填入党志愿书的参考格式【最新精选】.doc VIP
- JJF(蒙) 119-2025 烷基汞分析仪校准规范.docx VIP
原创力文档

文档评论(0)