本页所使用的objc runtime 756.2,来自GITHUB
一、引言
前文研究了对象、方法的基础,知道了对象/类的结构,类方法的生成和传递原理。下面该进入到核心环节,就是类的加载了,在这一个模块,需要了解的有下面几点:
- OC 的库
- app 的加载流程
- image 的结构
- 回调函数
- image 的加载流程
二、库
2.1、静态库
是一个外部函数与变量的集合体
iOS 在编译时执行静态库,链接到相应代码
静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与链接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件。
常见的iOS 环境下的静态库由 .a
文件,.framework
文件。java 环境下有.so
静态库
2.2、动态库
iOS 在运行时执行动态库,链接到相应的代码里。
.dylib 库文件
三、App 启动流程
1. dyld start
libdyld.dylib`start |
2. 加载镜像
reloadAllImages: |
3. 加载链接
loadInsertedDylib |
- 插入(insert): 插入网线
- 链接(link): 接通网络
四、dyld
4.1 start
4.2 递归初始化
4.3 objc_init
五、镜像 - images
- dyld
- Objc_init
六、回调函数
- 指针
- 注册
- *snotif