从点击运行到显示画面经历的那些事

只是介绍重点过程

  • 预编译器
    • 符号化
    • 宏定义的展开
    • import的展开
  • 编译器
    • 语法和语义分析
      • 将符号化后的内容转化为一棵解析树
      • 解析树做语义分析
      • 输出一棵抽象语法树
    • 生成代码和优化
      • AST转换为更低级的中间码 (LLVM字节码)
      • 对生成的中间码做优化
      • 生成特定目标代码
      • 输出汇编代码
  • 汇编器
    • 将汇编代码转换为机器代码。它会创建一个目标对象文件,一般简称为对象文件,文件以 .o 结尾
  • 链接器
    • 将多个目标对象文件合并为一个可执行文件 (.out)
  • 运行
    • dyld开始将可执行文件初始化
    • runtime遍历所有加载进来的Class,按继承层级依次调用Class+load方法和其Category+load方法;至此,可执行文件中和动态库所有的符号(Class,Protocol,Selector,IMP,…)都已经按格式成功加载到内存中,被runtime所管理,再这之后,runtime的那些方法(动态添加 Class、swizzle 等等才能生效)
    • dyld调用main函数
    • 创建UIApplication
    • 创建UIApplicationdelegate对象
    • 开启runloop
    • 程序启动完毕、调用代理的application:didFinishLaunchingWithOptions:
    • application:didFinishLaunchingWithOptions:里面创建window
    • 设置window的根控制器
    • 显示画面

参考链接:
iOS 程序 main 函数之前发生了什么
Mach-O 可执行文件

你可能感兴趣的:(从点击运行到显示画面经历的那些事)