App启动总时间 = main函数调用之前加载的时间 + main函数调用之后的加载的时间
main函数之前的优化:
减少动态库的使用,不要链接用不到的库(包括系统的),都会导致加载时间变长。
避免对系统库使用 optional linking,如果用的库所有版本上都有,设置为require,optional会有额外的检查。
减少oc 类、selector、分类的数量,合并或删减一些oc类。
删除无用代码,无用代码最终会导致可执行性文件体积增加,最终导致dyld耗时增加,即增加了启动时间。
将不必须放在+load方法中的事情放到+initialize,因为+load加载类时就会被调用,+initialize第一次初始化时才会被调用。
尽量不使用c++虚函数,创建虚函数表有开销。
main函数之后的优化:
梳理用到的第三方库,找到可以延迟加载的库,延迟加载,比如放到首页控制器或者用到相关功能的时候再加载。
梳理业务逻辑,把可以延迟的逻辑,做延迟处理,比如检查版本号、注册推送通知等逻辑。
复杂的计算放到子线程中处理,比如mode解析等。
避免在首页viewDidLoad和viewWillppear方法中做太多事情,可以延迟创建的视图延迟创建货使用懒加载。
首页控制器UI使用纯代码构建,xib/storyboard创建的页面第一次加载用时一般比纯代码多。
NSUserDefaults内不要存放太多数据。
减少log打印。
检测时间工具
使用Instrument 下Time Profiler可以检测app使用时间。
获得 main() 方法执行前的耗时比较简单,通过 Xcode 自带的测量方法既可以。
将 Xcode 中 Product -> Scheme -> Edit scheme -> Run -> Environment Variables 将环境变量 DYLD_PRINT_STATISTICS 或 DYLD_PRINT_STATISTICS_DETAILS 设为 1 即可获得执行每项耗时。