dyld(Dynamic Link Editor) 是 Apple 操作系统的动态加载器/链接器。
在 iOS 或 iPadOS 启动一个 Mach‑O 可执行文件时,dyld 会:
- 解析可执行文件头,确认 CPU 架构、地址空间布局随机化(ASLR)参数等。
- 递归解析依赖的动态库(LC_LOAD_ 命令)*,找到全部
.dylib
/.framework
路径。 - 重定位(rebasing)和符号绑定(binding):把文件偏移转换为虚拟地址,并把所有外部符号指向真正的实现。
- 准备 ObjC / Swift 运行时:注册
__DATA,__objc_*
、__TEXT,__swift*
等段,确保类、协议、方法能够被运行时发现。 - 调用各 image 的 C++ constructors /
+load
/initialize
,然后跳转到main
。
自 iOS 15 起,Apple 改用 dyld4,进一步缩短冷启动时间:
- 预计算了更完整的 Launch Closure,在启动时几乎无需再解析符号。
- 系统框架仍被整合进 dyld shared cache,单映射、零复制、页共享,提升缓存命中率与内存占用。