dyld

dyld_shared_cache

iOS 3.1 开始将所有的系统库编译成一个大的缓存文件 dyld_share_cache
位于 /System/Library/Caches/com.apple.dyld/

dyld

源码:https://opensource.apple.com/tarballs/dyld/

1. _dyld_start
dyldbootstrap::start
dyld::_main
2. 加载环境变量 checkEnvironmentVariables
3. 加载共享缓存 checkShareRegionDisable mapSharedCache
4. 加载完成后将dyld本身添加到UUID列表里
5. 加载镜像Image

.1 通过ImageLoader加载image
.2 通过loadInsertedDylib将动态库读取成镜像文件image
.3 遍历所有的镜像文件,将镜像文件链接到二进制文件中
.4 开始initializeMainExecutable初始化程序
.5 遍历ImageLoade,进行runInitializers初始化操作
.6 在processInitializers函数里遍历ImageLoader里的每个image进行rescursiveInitialization初始化
.7 image初始化中最终会走到_object_init函数里面将相应的镜像文件的函数指针注册到对应dyld的通知中去


APP启动 --> 加载 libSystem --> Runtime向注册回调函数 -->加载image -> 执行map_iamges/Load_images --> main()


DYLD_PRINT_OPTS
DYLD_PRINT_ENV

setContext(mainExecutableMH, argc, argv, envp, apple);

在这里插入图片描述

__DATA.__nl_symbol_ptr 非懒加载符号表
 __DATA.__la_symbol_ptr 懒加载符号表 由dyld_stub_binder 来绑定

iOS 13系统中,全面采用dyld 3
dyld会使用共享缓存 /var/db/dyld/ ;

查看Xcode编译时间

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

ref

https://juejin.cn/post/6844903973095211015 iOS进阶之路 (八)dyld加载流程
https://juejin.cn/post/6844903798586998797
https://www.jianshu.com/p/96f66b0c943c WWDC 2017
https://juejin.cn/post/6844904116158726151#heading-22
https://juejin.cn/post/6844904068867948552#heading-20 iOS探索 浅尝辄止dyld加载流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值