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可以进一步分析启动时间。
热门推荐
中俄东线天然气管道工程获新突破 我国油气管网基础设施加速建设
900亿立方米!中俄东线天然气管道累计输气量再创新高
抖音生活服务持续整治低质量视频,敦促“低质高产”机构提升内容质量
散热硅脂溢出会烧坏CPU吗?答案令人安心
写论文总被参考文献折磨?保姆级教程来啦
48岁男子坚持一年每天吃西红柿,结果让医生都羡慕不已
孩子啃咬指甲是怎么回事
为什么你或孩子总是不自觉地啃咬指甲?背后原因令人深思
猫薄荷对猫咪的影响:安全使用指南
破解素质危机:提升个人素养的有效策略
当遇到强买强卖的商家怎么办
创新外来人口服务管理 解码“一+三”工作法
很多人一辈子都在等哪吒母亲的拥抱
35岁后从综合岗转财务?资深HR给转型者的3个破局指南
八旬老太得流感后呼吸衰竭进了ICU 医生:流感季不可放松警惕
浇水大作战:你的发财树真的需要天天‘喝水’吗?
新规非绿牌电动车已经不让进单位了,新电动车的选购攻略来啦,2500左右电动车推荐
周期级数的傅里叶展开
这份信号将在宇宙传送5万年,最终暴露人类的位置
鸡蛋花:从天使传说到来自南国的美丽馈赠
清华最新Science论文:方璐/戴琼海团队开发太极光芯片,赋能通用人工智能
洛克王国世界阿米亚特技能介绍 洛克王国世界阿米亚特技能有哪些
数字电路项目化教学:实践技能与理论知识的完美结合
《蜘蛛侠2》DLSS4多帧生成测试!帧率飙升无明显延迟
健康好味,薏仁百合粥的营养与做法(百合清心、薏仁健脾)
畏光:症状、病因、诊断与治疗全解析
破除室内日光浴的 5 个误区!
跑步配速计算器:轻松设定赛事目标
浙江都市圈发展构想:义乌金华携手共赢,台州融入宁波
治疗口吃的方法一般有哪几种?