从点击运行到显示画面经历的那些事
作者:
dangbo | 来源:发表于
2017-03-19 10:29 被阅读13次
只是介绍重点过程
- 预编译器
- 编译器
- 语法和语义分析
- 将符号化后的内容转化为一棵解析树
- 解析树做语义分析
- 输出一棵抽象语法树
- 生成代码和优化
- 将
AST
转换为更低级的中间码 (LLVM字节码)
- 对生成的中间码做优化
- 生成特定目标代码
- 输出汇编代码
- 汇编器
- 将汇编代码转换为机器代码。它会创建一个目标对象文件,一般简称为对象文件,文件以 .o 结尾
- 链接器
- 将多个目标对象文件合并为一个可执行文件 (.out)
- 运行
-
dyld
开始将可执行文件初始化
-
runtime
遍历所有加载进来的Class
,按继承层级依次调用Class
的+load
方法和其Category
的+load
方法;至此,可执行文件中和动态库所有的符号(Class,Protocol,Selector,IMP,…)
都已经按格式成功加载到内存中,被runtime
所管理,再这之后,runtime
的那些方法(动态添加 Class、swizzle 等等才能生效)
-
dyld
调用main
函数
- 创建
UIApplication
- 创建
UIApplication
的delegate
对象
- 开启
runloop
- 程序启动完毕、调用代理的
application:didFinishLaunchingWithOptions:
- 在
application:didFinishLaunchingWithOptions:
里面创建window
- 设置
window
的根控制器
- 显示画面
参考链接:
iOS 程序 main 函数之前发生了什么
Mach-O 可执行文件
本文标题:从点击运行到显示画面经历的那些事
本文链接:https://www.haomeiwen.com/subject/qmdmnttx.html
网友评论