runtime常见用法三

作者: BigBowen | 来源:发表于2017-04-27 15:05 被阅读46次

问题:

首先我们先来了解一下字典转模型,当我们从服务器请求并解析完数据后,我们通常需要把解析后得到的字典转为模型(这里就不讨论字典嵌套数组,数组又嵌套字典的情况了),面向模型开发,即有利于代码的阅读,编写代码时又能避免字典字段无提示的尴尬.
提到字典转模型,我们通常使用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#>)

相关文章

  • runtime常见用法三

    问题: 首先我们先来了解一下字典转模型,当我们从服务器请求并解析完数据后,我们通常需要把解析后得到的字典转为模型(...

  • Runtime消息转发及其应用

      之前写过文章Runtime的常见用法里面有介绍过利用Objective-C的Runtime特性来给Catego...

  • iOS 常见知识点(一):Runtime

    iOS 常见知识点(二):RunLoop iOS 常见知识点(三):Lock Runtime Runtime 是一...

  • OC - runtime常见用法小结

    消息机制 - 调用私有方法 OC的runtime特性,使其没有严格意义上的私有方法。 方法交换 很多时候,我们想要...

  • Runtime 从NullSafe源码看消息转发 机制

    开篇 马上就要年底了再码一波,自己总结一下Runtime,打算总结一下Runtime的各种用法,结合一些常见的源码...

  • runtime常见用法二(交换方法)

    简单实现 接下来介绍一个iOS开发的黑魔法,方法交换,顾名思义,就是你可以在项目运行时替换一个方法的实现,例如,你...

  • Runtime 使用(7种常见用法)

    runtime作为Objective-C 运行时机制,是其一项核心技术,下面列举我们常见的一些用法。 1.动态修改...

  • iOS面试点文章链接

    runtime基础方法、用法、消息转发、super: runtime 完整总结 runloop源码、runloop...

  • iOS runtime 的7种常见用法

    动态给对象的成员变量赋值 class_copyIvarList:能够获取.h和.m中的所有属性以及大括号中声明的变...

  • runtime(四)-常见操作

    runtime很复杂庞大,懂了oc对象布局,理解了发消息过程和消息转发流程,还不够。接下来再学习一些常见用法,因为...

网友评论

  • imbaWales:不要给我讲什么底层原理,我敲代码就是一把梳,复制粘贴就是干!

本文标题:runtime常见用法三

本文链接:https://www.haomeiwen.com/subject/rdogzttx.html