App启动过程
- 解析Info.plist
沙箱建立、权限检查
- Mach-O 加载
- 加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)
- 执行声明为
__attribute__((constructor))
的C函数- 加载类扩展(Category)中的方法
- C++静态对象加载、调用ObjC的 +load 函数
- 程序执行
调用
main()
调用UIApplicationMain()
调用applicationWillFinishLaunching()
App的启动时间
Xcode 已经默认支持 Environment Variables
main函数之前
DYLD_PRINT_STATISTICS
value为1的环境变量
main()函数之前影响因素
- 动态库加载越多,启动越慢
- Objc类越多,启动越慢
- C的constructor越多,启动云
- C++静态对象越多,启动越慢
- Objc的+load越多,启动越慢
main()函数之后耗时的影响因素
- 执行main()函数的耗时
- 执行applicationWillFinishLaunching的耗时
- rootViewController及其childViewController的加载、view及其subviews的加载
移除不需要的动态库
移除不需要用到的类
合并功能类似的类和扩展(Category)
优化applicationWillFinishLaunching
优化rootViewController加载
网友评论