转自:iOS 知识小集

如果我们想知道程序启动的时间,则可以在工程的scheme中添加环境变量DYLD_PRINT_STATISTICS,如图1所示。这样在调试时,可以在控制台打印出程序启动过程中各个阶段所消耗的时间。

我们运行程序就可以看到应用的启动时间,每个阶段的耗时。

total time: 479.79 milliseconds (100.0%)
total images loaded: 119
total segments mapped: 454, into 42288 pages with 2946 pages pre-fetched
total images loading time: 218.66 milliseconds (45.5%)
total dtrace DOF registration time: 0.05 milliseconds (0.0%)
total rebase fixups: 833,487
total rebase fixups time: 75.39 milliseconds (15.7%)
total binding fixups: 104,307
total binding fixups time: 37.48 milliseconds (7.8%)
total weak binding fixups time: 0.17 milliseconds (0.0%)
total bindings lazily fixed up: 0 of 0
total time in initializers and ObjC setup: 148.02 milliseconds (30.8%)
libSystem.dylib : 122.52 milliseconds (25.5%)
libBacktraceRecording.dylib : 2.78 milliseconds (0.5%)
libc++.1.dylib : 0.33 milliseconds (0.0%)
CoreFoundation : 2.65 milliseconds (0.5%)
CFNetwork : 0.03 milliseconds (0.0%)
vImage : 0.01 milliseconds (0.0%)
libLLVMContainer.dylib : 1.36 milliseconds (0.2%)
libGLImage.dylib : 0.12 milliseconds (0.0%)
QuartzCore : 0.04 milliseconds (0.0%)
libViewDebuggerSupport.dylib : 0.05 milliseconds (0.0%)
total symbol trie searches: 48920
total symbol table binary searches: 0
total images defining weak symbols: 8
total images using weak symbols: 31

而且在iOS 10中,对输出的内容做了简化,如图2所示,简单易懂。这样,我们就可以有针对性去优化我们的启动流程。

另外,如果嫌弃控制台输出的乱七八糟打印太多,可以在上面相同的位置添加OS_ACTIVITY_MODE ,value 设置为disable即可。

参考

WWDC 2016 406 Optimizing App Startup Time

iOS应用启动时间的更多相关文章

  1. iOS MachO

    一.前言 1.1 程序和进程 广义上的程序就是一个静态的可执行文件,是由一个已经编译好的指令和数据集合的一个文件.就像通过 Xcode 编译好的 Mach-O 文件.而进程则是一个动态的概念,是程序的 ...

  2. iOS 动态 Framework 对App启动时间影响实测

    最近看到的Slow App Startup Times里提到: The dynamic loader finds and reads the dependent dynamic libraries ( ...

  3. 实测iOS Dynamic Framework 对 App 启动时间的影响效果

    最近看到的Slow App Startup Times里提到: The dynamic loader finds and reads the dependent dynamic libraries ( ...

  4. iOS 启动时间优化

    在 WWDC 2016 上首次提到了关于 App 应用启动速度优化的话题:Session 406 Optimizing App Startup Time. 一.冷启动与热启动 热启动是,APP会恢复之 ...

  5. iOS 如何优化 App 的启动时间

    App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 Mach-O 二进制的加载 理论速成 Mach-O 术语 Mach-O 是针对不同运行时可执行文件的文件类型. 文件类 ...

  6. iOS项目启动及启动时间优化

    app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...

  7. Facebook iOS App如何优化启动时间

    http://www.cocoachina.com/ios/20160105/14870.html 提高 Facebook 应用的性能已经成为 Facebook 持续关注的领域.因为我们相信一个高性能 ...

  8. 25条提高iOS App性能的建议和技巧

    这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or fol ...

  9. iOS开发app启动原理及视图和控制器的函数调用顺序

    main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...

随机推荐

  1. Collections、Arrays 简明

    Collections : 它的出现给集合操作提供了更多的功能.这个类不需要创建对象,内部提供的都是静态方法. 一般方法 Collections. sort (list); list 集合进行元素的自 ...

  2. SQL基础-----DDL

    1 (My)SQL入门 这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者. 2:SQL分类 SQL语句主要可以划分为以下3个类别 .DDL ...

  3. 开源协议瞎扯淡,什么是 MIT 协议?[转]

    图片来源:http://ruby-china.org/topics/15979

  4. java---interrupt、interrupted和isInterrupted的区别

    1.interrupt()  interrupt方法用于中断线程.调用该方法的线程的状态为将被置为"中断"状态. 注意:线程中断仅仅是置线程的中断状态位,不会停止线程.需要用户自己 ...

  5. ●BZOJ 2149 拆迁队

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题解: 斜率优化DP,栈维护凸包,LIS,分治(我也不晓得是不是CDQ分治...) 一 ...

  6. hdu 5052 树链剖分

    Yaoge’s maximum profit Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  7. POJ2187Beauty Contest 旋转卡壳

    题目链接 http://poj.org/problem?id=2187 先求凸包 再求凸多边形直径 旋转卡壳模板题 #include<cstdio> #include<cstring ...

  8. HDU1348 Wall 凸包

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1348 题意:给出一个凸包,求出与凸包距离 L的外圈周长 凸包模板题,练练Andrew算法求出凸包周长再 ...

  9. bzoj1227 组合数学+bit

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1412  Solved: 664[Submit][Stat ...

  10. 如何理解Spring IOC

    Spring IOC 思维导图 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Pr ...