RunTime的学习

OC的特性是:

消息分发,是动态调用过程,就是在编译时并不知道消息的接收对象,只有在运行时才会才会根据函数的名称找到对应的函数来调用,,在运行过程中都是转成了runtime的C语言代码,真正的boss是runtime。

类的组成在:

isa指针;;super_class父类;;cache方法混存区;;Version类的版本信息;;objc_method_list存放类的成员方法

调用方法过程:

例如当我们去调用respondsToSelector:这个方法时,调用对象首先会先根据isa找到对应的类(class),先去chahe中查找这个方法是否缓存过,没有的话再去遍历methodLists,如果还没有就根据super_class找到父类,再去像之前那样查找这个方法,知道super_class为nil,就无法找到这个方法了,则返回NO。

常见作用:

1.动态的添加对象的成员变量和方法,修改属性值和方法

2.动态交换两个方法的实现

3.实现分类也可以添加属性

4.实现NSCoding的自动归档和解档

5.实现字典转模型的自动转换

6.动态创建一个类(比如KVO的底层实现)

代码实践:

RunTime的学习_第1张图片
RunTime的学习_第2张图片

你可能感兴趣的:(RunTime的学习)