App啟動流程

1.首先當程序啟動時,系統(tǒng)會讀取程序的可執(zhí)行文件(mach-o), 從里面獲取動態(tài)加載器(dylb)的路徑;
2.加載dylb, dylb會初始化運行環(huán)境,配合ImageLoader將二進制文件加載到內存中去;
3.動態(tài)鏈接依賴庫, 初始化依賴庫,初始化 runtime;
4.runtime 會對項目中的所有類進行類結構初始化,調用所有的 load 方法;
5.最后 dylb 會返回 main 函數(shù)地址,main 函數(shù)被調用,進入程序入口

main 函數(shù)執(zhí)行順序
1.內部會調用 UIApplicationMain 函數(shù),創(chuàng)建一個UIApplication對象和它的代理,就是我們項目中的 Appdelegate 類
2.開啟一個事件循環(huán)(main runloop), 監(jiān)聽系統(tǒng)事件。
3.程序啟動完畢時,通知代理Appdelegate, 調用 didFinishLaunching 代理方法,在這里會創(chuàng)建 UIWindow,設置它的rootViewController,
4.最后調用 self.window makeKeyAndVisable顯示窗口

啟動時間優(yōu)化

分為 main 函數(shù)執(zhí)行前和執(zhí)行后,所以優(yōu)化啟動時間也可從兩個方面著手

  1. main 函數(shù)前的時間優(yōu)化

1.合并功能類似的類和擴展,由于分類和 oc 的動態(tài)綁定有很大關系,所以要盡量減少多余的分類
2.移除不需要的動態(tài)庫,減少動態(tài)庫的數(shù)量,因為鏈接動態(tài)庫是需要時間的,在自己pod工具庫的時候,工具庫最好是能合并到一個里面,不要弄太多的類。

main 函數(shù)后的時間優(yōu)化

1.這和我們的代碼邏輯書寫有很大關系,它的執(zhí)行順序為 main -> didFinishLanuching -> window、rootViewController -> 獲取數(shù)據(jù) -> 顯示頁面

2.這個優(yōu)化的核心就是,少在 Appdelegate 中寫太多代碼,一些耗時的操作盡量不要再這里操作,能延遲初始化的,就延遲,不能延遲的就放到后臺

頁面布局邏輯:先顯示界面,給一個默認狀態(tài)視圖,等數(shù)據(jù)請求完畢后再刷新界面,這樣比等數(shù)據(jù)請求完整財顯示界面看起來更加時間快

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容