時(shí)間分為兩個(gè)部分 T1(main前) + T2(main后), {T1:系統(tǒng)環(huán)境布局時(shí)間:創(chuàng)建進(jìn)程肃续,加載解析可執(zhí)行文件(庫(kù)加載蝙场,堆棧環(huán)境配置等等)兄淫, T2:從main函數(shù)到第一個(gè)界面顯示時(shí)間}
1 庫(kù)加載越多茧跋,啟動(dòng)越慢
2 Objc類越多金麸,越慢
3 靜態(tài)對(duì)象全局對(duì)象越多,啟動(dòng)越慢
4 Objc的 +load越多览妖,啟動(dòng)越慢
我們比較能把控的點(diǎn):load 和 T2時(shí)間上進(jìn)行優(yōu)化
- 每個(gè)objc類都有一個(gè)
+load
函數(shù)轧拄,而它的調(diào)用優(yōu)先級(jí)在調(diào)用main
函數(shù)之前 -
通過(guò)以下操作可以論證上述的觀點(diǎn)
優(yōu)化3.png
啟動(dòng)優(yōu)化2.png
- 編譯,控制臺(tái)輸出如下
2018-05-09 17:02:43.610114+0800 demo[6371:689596] +[ViewController load]
2018-05-09 17:02:43.613407+0800 demo[6371:689596] main
(lldb)
- 結(jié)論1:盡量避免過(guò)多使用
+load
方法讽膏,可以使用+initlalize
替代
在系統(tǒng)第一次使用到這個(gè)類的使用檩电,才會(huì)使用到他的+(void)initlalize
方法,比如:
【 A alloc】init】
// 第一次執(zhí)行的時(shí)候府树,會(huì)先執(zhí)行 A的nitialize 然后才alloc
- 結(jié)論2:減少
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
里面的操作俐末,在啟動(dòng)頁(yè)出現(xiàn)后再進(jìn)行相關(guān)操作.(例如放到子線程中去執(zhí)行)
關(guān)于每個(gè)objc文件的+load函數(shù)的執(zhí)行循序
- 每個(gè)objc文件都有
+load
方法,那么他們的執(zhí)行順序是怎么樣的奄侠?
優(yōu)化4.png - 此處的文件順序卓箫,決定了
+load
的執(zhí)行順序