可以在Scheme 中添加環(huán)境變量DYLD_PRINT_STATISTICS

DE35C95D-A2A3-4F35-976A-FDE235775A83.png
WWDC 2016 Session 406優(yōu)化應(yīng)用程序啟動(dòng)時(shí)間詳細(xì)介紹了每個(gè)步驟以及改進(jìn)時(shí)間的提示,以下是簡(jiǎn)要的總結(jié)說明:
- dylib loading time 動(dòng)態(tài)加載程序查找并讀取應(yīng)用程序使用的依賴動(dòng)態(tài)庫(kù)。每個(gè)庫(kù)本身都可能有依賴項(xiàng)。雖然蘋果系統(tǒng)框架的加載是高度優(yōu)化的,但加載嵌入式框架可能會(huì)很耗時(shí)。為了加快動(dòng)態(tài)庫(kù)的加載速度,蘋果建議您使用更少的動(dòng)態(tài)庫(kù),或者考慮合并它們。
建議的目標(biāo)是六個(gè)額外的(非系統(tǒng))框架。
Rebase/binding time 修正調(diào)整鏡像內(nèi)的指針(重新調(diào)整)和設(shè)置指向鏡像外符號(hào)的指針(綁定)。為了加快重新定位/綁定時(shí)間,我們需要更少的指針修復(fù)。
如果有大量(大的是20000)Objective-C類、選擇器和類別的應(yīng)用程序可以增加800ms的啟動(dòng)時(shí)間。
如果應(yīng)用程序使用C++代碼,那么使用更少的虛擬函數(shù)。
使用Swift結(jié)構(gòu)體通常也更快。ObjC setup time Objective-C運(yùn)行時(shí)需要進(jìn)行設(shè)置類、類別和選擇器注冊(cè)。我們對(duì)重新定位綁定時(shí)間所做的任何改進(jìn)也將優(yōu)化這個(gè)設(shè)置時(shí)間。
initializer time 運(yùn)行初始化程序。如果使用了Objective-C的 +load 方法,請(qǐng)將其替換為 +initialize 方法。