iOS 编译优化面试题
编译优化-链接优化
链接是 iOS 编译的最后一个阶段,也是大型工程里经常被忽略的瓶颈。Apple 在 WWDC22 的 “Link fast: Improve build and launch times” 演讲中公开:Xcode 14 新的 ld-prime 链接器比 ld64 快 2 倍。随着 Xcode 17、ThinLTO、Mergeable Libraries 等改进,链接优化已经成为编译加速的重要一环。 链接器的职责 链接器把多个 .o 合并成最终可执行文件或库: flowchart TD A[若干 .o] --> L[链接器] B[静态库 .a] --> L C[动态库 .dylib / framework] --> L L --> D[符号解析] D --> E[dead_strip] E --> F[ObjC runtime fix-up] F --> G[生成 LC_* 加载命令] G --> H[写入 Mach-O] 关键任务: 符号解析:所有 undefined symbol 必须在某个 .o / .a / .dylib 里找到 重定位:把符号引用的偏移写入正确位置 Dead Strip:去掉未被使用的代码/数据 ObjC 元数据修复:把分散的类、分类信息合并成 ObjC runtime 能识别的结构 生成 Mach-O:写 Load Commands、__LINKEDIT 等段 链接器对比 ld64(经典) ld64 是 Apple 长期使用的经典链接器,源代码在 apple-oss-distributions/ld64。单线程为主,在大工程上明显偏慢。 ...