iOS应用启动优化详解:从pre-main到main阶段
创作时间:
作者:
@小白创作中心
iOS应用启动优化详解:从pre-main到main阶段
引用
CSDN
1.
https://blog.csdn.net/weixin_40035526/article/details/140994527
iOS应用的启动速度是影响用户体验的重要因素之一。本文将深入探讨iOS应用启动的两个主要阶段:pre-main阶段和main阶段,并分析每个阶段的耗时情况和优化方法。
pre-main阶段
在pre-main阶段,系统主要完成以下任务:
- 加载应用的可执行文件(自身App的所有.o文件的集合)
- 加载动态链接器dyld(dynamic loader,是一个专门用来加载动态链接库的库)
- dyld递归加载应用所有依赖的动态链接库dylib
- Bind & Rebase & Runtime 初始化
- +load 和静态初始化
要查看这些阶段的耗时情况,可以通过配置dyld的参数来获取相关信息。具体步骤如下:
在Xcode中,进入"Edit Schemes" -> "Run" -> "Arguments" -> "Environment Variables",添加配置:
DYLD_PRINT_STATISTICS
配置完成后,运行程序并查看控制台输出。例如,可以看到main函数之前总共消耗了356.03毫秒,而且列出了每个阶段的耗时占比以及启动时最慢文件。
- dylib loading time:动态库加载耗时(121.68ms)。减少动态库的引用或合并动态库可以优化这部分耗时。
- rebase/binding:偏移修正/符号绑定。这个过程由操作系统完成,与ASLR安全机制相关。
- ObjC setup:OC类注册以及Runtime 初始化。项目中OC类越多,这里消耗的时间也越多。
- initializer:这个阶段指的是+ (void)load,C++构造函数等初始化操作。用时162.29ms,是所有项最高的。优化建议包括:
- 能不使用+load就尽量不要使用,可以将load内部逻辑推迟到initialize时;
- 使用到了load,就尽量不要在内部执行耗时操作;
- 如果混编了C++代码,要尽量减少构造函数中的耗时操作。
main阶段
在main阶段,系统主要完成以下任务:
- 调用main()
- 调用UIApplicationMain()
- 调用applicationWillFinishLaunching
优化建议:
- 统计打点:使用全局变量统计打点计算启动时间,但遇到时间较长需要排查问题时,建议把启动任务规范化、粒子化,针对每个任务时长进行打点统计。
- 延迟加载:梳理第三方库,找到可以延迟加载的库,比如放到首页控制器的viewDidAppear方法里。
- 延迟执行:梳理业务逻辑,把可以延迟执行的逻辑,做延迟执行处理。比如检查新版本、注册推送通知等逻辑。
- 优化首页控制器:避免复杂/多余的计算,首页控制器尽量采用纯代码方式来构建以节约耗时。避免在首页控制器的viewDidLoad和viewWillAppear做太多耗时操作,部分可以延迟创建的视图应做延迟创建/懒加载处理。
通过上述优化,APP的启动时间基本可以控制在1秒左右。使用Xcode自带的性能检测调试工具Instruments可以进一步分析启动时间。
热门推荐
翻遍整个NBA历史,拿过MVP全都进了名人堂,唯独他可能进不了!
丧偶之后,一个人最聪明的“活法”:拒绝3件事
紫砂“触网” 非遗焕新
在线氨气测试仪:保障工业安全与环境的智慧之眼
长期坐姿不良,腰酸背痛找上门,应如何缓解?
2分钟讲明白离心泵调试和安装
能效等级是什么意思?一级能效和三级能效的区别
狼人杀中狼美人是什么啊,有什么技能?(狼人杀人物大揭秘:狼美人篇)
模拟人生3:在虚拟世界中体验真实人生
肤色暗沉发黄喝中药调理有用吗?
长期服用奥美拉唑的影响有哪些?女子每天坚持吃后,身体有何变化
為什麼早上空腹血糖會偏高?淺論黎明現象與梭莫基效應
业内人士关注数据资产入表——推动出版业迈入数据驱动时代
农业政策与市场分析:解读当前政策导向下的农业发展趋势
葛根湯買前必讀:功效與副作用解析及產品推薦
什么是股票内幕交易及其风险?这种风险如何影响市场的公平性?
国家最高科学技术奖获得者李德仁院士:科学要为祖国服务
太空垃圾对人类太空探索的影响有多严重?
夏日“轻熟风”穿搭示范,舒服时髦又温柔,每一套都超好看
我做的绩效考核无效?打破分数迷思,3 步骤催出员工的成长动力
揭秘古代宫女真实生活状况:生如牲畜任人糟践,死后无葬身之地
3D二次元动漫格斗网游鼻祖《艾尔之光》到底哪好玩?
无线充电还是有线充电(探讨无线充电与有线充电的优缺点)
物流管理的基本内容是什么?
互联网社交,如何重塑我们的人际关系与沟通方式?
人类对微波炉的开发不足 1%!9 个隐藏用法,第一个就惊呆我
蜂蜜怎么保存比较好?常温保存还是冰箱里保存好?
挤痘印留下的黑色素能去掉吗
2024跨境金融的实用指南:如何选择并开通境外银行账户
《好团圆》不止于话题与风波,都市家庭剧进阶4.0时代