从点击运行到显示画面经历的那些事
2017-03-19 本文已影响13人
dangbo
只是介绍重点过程
- 预编译器
- 符号化
- 宏定义的展开
-
import的展开
- 编译器
- 语法和语义分析
- 将符号化后的内容转化为一棵解析树
- 解析树做语义分析
- 输出一棵抽象语法树
- 生成代码和优化
- 将
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的根控制器 - 显示画面
-