runtime常见用法三

问题:

首先我们先来了解一下字典转模型,当我们从服务器请求并解析完数据后,我们通常需要把解析后得到的字典转为模型(这里就不讨论字典嵌套数组,数组又嵌套字典的情况了),面向模型开发,即有利于代码的阅读,编写代码时又能避免字典字段无提示的尴尬.
提到字典转模型,我们通常使用KVC,KVC的底层实现思路是:
1.遍历解析后的字典中的key,根据key去模型中找与key同名的setter方法,然后把key对应的value赋值给该setter方法对应的属性
2.如果找不到同名setter方法,则找模型中与key同名的属性,然后把key对应的value赋值给该属性
3.如果同名属性也找不到,就会去找带下划线的同名成员变量,然后把value赋值给该成员变量
4.如果连带下划线的成员变量也找不到,那么就会报错了,为了防止报错,我们通常会实现setvalue:forundifinekey方法.

通过以上介绍,我们知道,KVC会遍历字典内全部的key,此时我们模型中需要赋值的属性可能只有三五个,但实际情况模型一般都有十几个属性.另外,我们还有实现setvalue:forundifinekey方法以防止找不到同名key.

解决:

如果我们利用runtime,就可以避免这种情况了,runtime是遍历模型中的属性,然后去字典中寻找对应的key,然后把value赋值给属性.
大概思路:
先使用runtime的函数取出模型的成员变量(这里不取属性,因为有些可能直接声明成员变量,没有声明属性,而声明了属性的话一定会生成成员变量),得到成员变量名称数组,然后创建一个新的字典,key值为所得到的变量名称,value为原字典中key所对应的value,,最后再使用KVC即可.

//ivar表示成员变量
//第一个参数表示要获取哪个类的成员变量列表
//第二个是成员变量的数量,传入一个指针
class_copyIvarList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,812评论 7 64
  • 转自:http://www.jianshu.com/p/dd355fbfa029kvc不经常使用,可能会忘记。转载...
    BetterComingDay阅读 955评论 0 1
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,082评论 0 9
  • 这夜,如此的漫长, 漫长的望不到边。 黑夜,寂静, 是诗人的最爱, 孤独则是诗人的常态。 纵有面朝大海,春暖花开的...
    清泽阅读 244评论 7 4
  • 这个城市每天有八百万个故事在上演,我们的只是其中一个…… 1. 六六和易先生分手已有1年多了。 昨天晚上六六对我说...
    韩世伊扬阅读 1,145评论 2 2

友情链接更多精彩内容