runtime : 运行时机制 1、runtime是什么 1> runtime是一个全动态语言,是基于c语言的库,里面包含了不少底层的C语言函数。 2> 平时编写的OC代码, 在程序运行过程当中, 其实最终都是转成了runtime的C语言代码, runtime算是OC方法的底层实现,换句话说oc的实现也就是runtime的底层调用。 下面来举个实例,(在前面的文章中讲到过了!经过编译成c语言,咱们能够看到底层文件) OC : [[Person alloc] init] 上面的Person对象建立时候, runtime : objc_msgSend(objc_msgSend(“Person” , “alloc”), “init”) 而上面这部分只是明白了最基础的原理,那么runtime又有哪些更深的运用呢? 2、runtime能用来作什么? 1> runtime是属于OC的底层, 能够进行一些很是底层的操做(用OC是没法现实的, 很差实现能够经过runtime是实现) 2>在程序运行过程当中, 动态建立一个类,例如:KVO的底层实现。 在程序运行过程当中, 动态地为某个类添加属性\方法, 修改属性值\方法。 遍历一个类的全部成员变量(属性)\全部方法 3.相关的头文件和函数 1> 头文件 打开头文件,咱们发现许多的方法,可是咱们用的最多的是下面的函数, 相关函数 objc_msgSend : 给对象发送消息 class_copyMethodList : 遍历某个类全部的方法 class_copyIvarList : 遍历某个类全部的成员变量 class_….. 固然,在使用这些东西的时候,咱们首先要明白一些东西, 必备常识 1> Ivar : 成员变量 2> Method : 成员方法 2> runtime相关实际应用 NSCoding(归档和解档, 利用runtime遍历模型对象的全部属性) 字典 –> 模型 (利用runtime遍历模型对象的全部属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上) KVO(利用runtime动态产生一个类) 用于封装框架(想怎么改就怎么改)