编译 && 链接
$[timeformat('2021-10-08T10:55:27+08:00')]

iOS开发中编译链接过程:

  • 预处理 (Prepressing)
  • 静态语法检测 生成AST(Analyze Static)
  • 编译 (Compilation)
  • 汇编 (Assembly)
  • 链接 (Linking)

写好代码后, LLVM 会预处理代码,比如把宏嵌入到对应的位置; 预处理完成后, LLVM 会对代码进行词法分析和语法分析,生成 AST , AST 是抽象语法树,结构上比代码更精简,遍历起来更快,所以使用 AST 能够快速的进行静态检查,同时还能更快地生成生成 IR (中间表示) 最后 AST 会生成 IR, IR 是一种更近机器码的语言区别在于和平台无关,通过 IR 可以生成多分适合不同平台的机器码。对于iOS系统,IR 生成的可执行文件就是 Mach-O.

预处理 ------ 静态语法检测 ------ AST抽象语法树 ------ IR -----

链接器

链接器最主要的作用,就是将符号绑定到地址上。

编译器

为什么 iOS代码快?

iOS 编写的代码是先使用编译器把代码编译成机器码(OC --> C/C++ --> 机器码),然后直接在 CPU 上执行机器码的。

Python 编写的代码,是程序在CPU运行时,用解释器获取源码 直接生成指令,中间不会产生另一种代码。