- App啟動(dòng)過(guò)程
-
解析Info.plist
加載相關(guān)信息弦疮,例如如閃屏
沙箱建立剧辐、權(quán)限檢查
Mach-O加載
如果是胖二進(jìn)制文件解恰,尋找合適當(dāng)前CPU類(lèi)別的部分
加載所有依賴(lài)的Mach-O文件(遞歸調(diào)用Mach-O加載的方法)
定位內(nèi)部锋八、外部指針引用,例如字符串护盈、函數(shù)等
執(zhí)行聲明為attribute((constructor))的C函數(shù)
加載類(lèi)擴(kuò)展(Category)中的方法
C++靜態(tài)對(duì)象加載挟纱、調(diào)用ObjC的 +load 函數(shù)
- 程序執(zhí)行
調(diào)用main()
調(diào)用UIApplicationMain()
調(diào)用applicationWillFinishLaunching
main之前的優(yōu)化
動(dòng)態(tài)庫(kù)加載越多,啟動(dòng)越慢腐宋。
ObjC類(lèi)越多紊服,啟動(dòng)越慢
C的constructor函數(shù)越多,啟動(dòng)越慢
C++靜態(tài)對(duì)象越多胸竞,啟動(dòng)越慢
ObjC的+load越多欺嗤,啟動(dòng)越慢
main之后的優(yōu)化
rootViewController及其childViewController的加載、view及其subviews的加載
具體做法可以打點(diǎn)記錄各種vc view的初始化時(shí)間卫枝。
主要還是針對(duì)不同業(yè)務(wù)的優(yōu)化煎饼,在我的項(xiàng)目中,有個(gè)后臺(tái)串行的隊(duì)列校赤,去初始化各種不需要立即加載的資源吆玖,注冊(cè)各種三方。