博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Runtime&json->model
阅读量:5938 次
发布时间:2019-06-19

本文共 1439 字,大约阅读时间需要 4 分钟。

hot3.png

原理描述:

用runtime提供的函数遍历Model自身所有属性,如果属性在json中有对应的值,则将其赋值

核心方法:在NSObject的分类中添加方法

- (instancetype)initWithDict:(NSDictionary *)dict {    if (self = [self init]) {        //(1)获取类的属性及属性对应的类型        NSMutableArray * keys = [NSMutableArray array];        NSMutableArray * attributes = [NSMutableArray array];        /*         * 例子         * name = value3 attribute = T@"NSString",C,N,V_value3         * name = value4 attribute = T^i,N,V_value4         */        unsigned int outCount;        objc_property_t * properties = class_copyPropertyList([self class], &outCount);        for (int i = 0; i < outCount; i ++) {            objc_property_t property = properties[i];            //通过property_getName函数获得属性的名字            NSString * propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];            [keys addObject:propertyName];            //通过property_getAttributes函数可以获得属性的名字和@encode编码            NSString * propertyAttribute = [NSString stringWithCString:property_getAttributes(property) encoding:NSUTF8StringEncoding];            [attributes addObject:propertyAttribute];        }        //立即释放properties指向的内存        free(properties);        //(2)根据类型给属性赋值        for (NSString * key in keys) {            if ([dict valueForKey:key] == nil) continue;            [self setValue:[dict valueForKey:key] forKey:key];        }    }    return self;}

 

转载于:https://my.oschina.net/u/3166681/blog/1555500

你可能感兴趣的文章
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>