启动时间计算公式
App总启动时间 = t1(main()之前的加载时间) + t2(main()之后的加载时间)。
APP启动时间分为 main()之前的加载时间 和 main()之后的加载时间
main()之前的加载时间 :系统dylib(动态链接库)和自身App可执行文件的加载
main()之后的加载时间:main方法执行之后到AppDelegate类中的
- (BOOL)Application:(UIApplication *)Application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法执行结束前这段时间,主要是构建第一个界面,并完成渲染展示
main()调用之前的加载过程:
App开始启动后,系统首先加载可执行文件(自身App的所有.o文件的集合),然后加载动态链接库dyld,dyld是一个专门用来加载动态链接库的库。 执行从dyld开始,dyld从可执行文件的依赖开始, 递归加载所有的依赖动态链接库。
动态链接库包括:iOS 中用到的所有系统 framework,加载OC runtime方法的libobjc,系统级别的libSystem,例如libdispatch(GCD)和libsystem_blocks (Block)。
针对这一步骤的优化有:
1.减少非系统库的依赖
2.合并非系统库
3.使用静态资源,比如把代码加入主程序