- App启动过程
-
解析Info.plist
加载相关信息,例如如闪屏
沙箱建立、权限检查
Mach-O加载
如果是胖二进制文件,寻找合适当前CPU类别的部分
加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)
定位内部、外部指针引用,例如字符串、函数等
执行声明为attribute((constructor))的C函数
加载类扩展(Category)中的方法
C++静态对象加载、调用ObjC的 +load 函数
- 程序执行
调用main()
调用UIApplicationMain()
调用applicationWillFinishLaunching
main之前的优化
动态库加载越多,启动越慢。
ObjC类越多,启动越慢
C的constructor函数越多,启动越慢
C++静态对象越多,启动越慢
ObjC的+load越多,启动越慢
main之后的优化
rootViewController及其childViewController的加载、view及其subviews的加载
具体做法可以打点记录各种vc view的初始化时间。
主要还是针对不同业务的优化,在我的项目中,有个后台串行的队列,去初始化各种不需要立即加载的资源,注册各种三方。