iOS从点击一个应用图标到程序主页面显示出来经历了哪些过程呢?
我们可以把启动过程分为main函数之前和main函数之后两个部分。
main函数之前
1.加载可执行文件
2.加载动态链接库加载器dyld
3.dyld递归加载dylibs
dyld加载过程
我们首先学习dyld加载过程,主要分5个部分。可以参考这里 。
1.Load dylibs
- 解析所依赖的dylibs
- 找到所需的mach-o文件
- 打开和读取文件然后验证有效性
- 注册代码签名
- 每一个segment调用mmap()
2.Rebase
- 对镜像调整指针。
3.Bind
- 设置指针指向外部的镜像。
4.Objc
- 大部分的初始化工作已经通过Rebase和Bind做完
- 注册所有的Objc类
- 将category插入到方法列表
- 保证方法唯一
5.Initializers
- 调用Objc和分类的+load方法
- Dyld调用main()函数
main函数之后
main函数之后我们可以看下面这张图:
image
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
网友评论