ios runtime加载流程

1、动态库加载DllMain各种初始化

2、_objc_init各种初始化:environ init 、 tls init 、static init、lock init 、exception init

3、mapimage里面主要工作是load image也就是加载资源,是 第一次的时候sel init、autoreleasepool初始化、sidetable init

4、_read_images开始读取资源,readclass发现所有的class,可以理解为读取class信息,具体就是往map里面存入class的信息,然后再进行重新映射这里可能是对于一些需要重新映射的class进行重新映射(修复类列表和懒加载列表还没有映射的情况),下面就是注册所有的sel方法,然后就是readprotocol遍历head里面class对应的protocol都读进来存入到map,和class类似,也需要remap一下protocol,然后实现所有的class,这时候把class的data部分进行实例化,需要注意的是data现在还只是一个空的并没有内容,然后构建父子结构、元类结构,然后methodizeClass函数里会赋值data的内容把methods、properties、protocols加进去,再把category里面的内容attach进来,具体说下category里面的内容处理是会插入到class原有的methodlist 、protocollist、property list 前面的,所以寻址的时候,是先找到category的实现,也就是实现了对于class原有实现的覆盖;通过源码的阅读发现后面才是真正的进行category list的创建和存储,存储到map里面,然后再attach到class上,我认为在前面的methodizeClass函数主要没有对于category的添加,而实际的添加就是在后面这一块代码进行的category的处理。



ios runtime加载流程_第1张图片
盗图忘了再哪看了,需要我删除的联系我 0 0 。

你可能感兴趣的:(ios runtime加载流程)