编译流程:
- 预处理:处理宏定义,删除注释,展开头文件。
- 词法分析:把代码切成一个个token,比如大小括号等于号还有字符串
- 语法分析:验证语法是否正确,合成抽象语法树AST
- 静态分析:查找代码错误
- 类型检查:动态和静态
- 目标代码的生成与优化,包括删除多余指令,选择合适的寻址方式,如果开启了bitcode,会做进一步的优化
- 汇编:由汇编器生成汇编语言
- 机器码:由汇编语言转成机器码,生成.o文件
应用启动的流程:
启动的前提是完成编译,运行程序即运行编译过后的目标程序,它分为main函数前和main函数后:
main前 - 加载可执行文件(App的.o文件集合)
- 加载动态链接库(系统和应用的动态链接库),进行rebase指针调整和bind符号绑定
- Objc运行时的初始处理,包括Objc相关类的注册,category注册,selector唯一性检查
- 初始化,包括执行+load()、attribute(constructor)修饰的函数的调用、创建C++静态全局变量
main后 - 首页初始化所需要配置文件的读写操作
- 首页界面渲染