启动优化

2019/10/11 posted in  iOS

main 函数执行开始会进入到appDelegatedidFinishLaunchingWithOptions方法执行

很多人在一些第三方 SDK 初始化配置,各种初始化的工作都放在appDelegatedidFinishLaunchingWithOptions 这个阶段执行,其实是不合理的,正确的做法应该是弄清楚哪些是APP 启动时候真正需要的初始化功能,哪些是在其对应功能开始使用时才需要初始化的,梳理完之后把他们都放在对应的阶段进行。

首屏渲染这部分的代码止于didFinishLaunchingWithOptions 方法作用于结束。因为这时候首屏已经完成了渲染,所以可以不着急立马对其优化,但是那些阻碍线程的操作还是要优先处理的。

首屏渲染完成之后的阶段应该是非首屏其他业务模块的初始化,监听的注册,配置文件的读取等等。

时间统计

可以在Edit Scheme中添加Arguments用来统计启动时间

屏幕快照 2019-04-09 上午11.51.38

添加参数DYLD_PRINT_STATISTICS 并且 value 为1

这样启动app的时候就会有时间统计

Total pre-main time: 3.3 seconds (100.0%)
         dylib loading time: 551.91 milliseconds (16.4%)
        rebase/binding time: 1.8 seconds (54.5%)
            ObjC setup time: 754.55 milliseconds (22.5%)
           initializer time: 217.73 milliseconds (6.4%)
           slowest intializers :
             libSystem.B.dylib :  12.87 milliseconds (0.3%)

同时这个顺序也就代表了应用启动时的执行顺序。