ios專案優化

語言: CN / TW / HK

本文主要從以下七個方向來探討IOS的專案優化

1.CPU效能優化

CUP主要負責物件的建立銷燬,佈局的計算,文字的計算和排版,圖片解碼,影象繪製等

我們可以對CUP進行如下優化

1.1 儘量使用輕量級的物件,比如用不到事件處理的地方,可以考慮使用CALayer代替UIView

1.2 不要頻繁的呼叫UIView的相關屬性,儘量減少不必要的修改

1.3 儘量提前計算好佈局,並且存在記憶體中,避免重複計算

1.4 自己手動設定frame比Autolayout消耗資源更少

1.5 圖片的size最好剛好和UIImageView的size保持一致,避免縮放演算法

1.6 儘量把耗時的操作放到子執行緒(比如文字的尺寸計算,繪製,圖片的解碼繪製等)

參考YYKitDemo裡的WBStatusTimelineViewController

2.GPU效能優化

GPU主要負責紋理的渲染,針對GPU,我們可以做以下優化:

2.1 儘可能將多張圖片合成一張進行顯示

2.2 儘量減少檢視的數量和層次,檢視的數量和層次越多,需要渲染的圖層就越多

2.3 減少透明的檢視,特別是上層檢視透明,這樣會導致畫素的混合計算

2.4 儘量避免出現離屏渲染,想了解離屏渲染,可以移步我另一篇文章https://juejin.cn/post/7005863194098925604

3.記憶體優化

3.1 我們可以通過Xcode的Analyze靜態分析我們的程式碼,檢測沒用到的變數及一些語法錯誤等

3.2 我們可以通過Xcode-Open Developer Tool-Instruments-Leaks來動態檢測記憶體洩漏

4.卡頓優化

4.1 我們可以通過runloop來檢測專案的卡頓情況,還有別的方法歡迎補充,使用runloop檢測卡頓可以參考:https://github.com/search?q=LXDAppFluecyMonitor

5.耗電優化

5.1 少用定時器

5.2 資料量大的儘量使用資料庫

5.3 減少壓縮網路資料

5.4 用適當的快取代替頻繁的網路請求

5.5 定位如果不要求實時性,則定位完畢及時關掉

5.6 斷點續傳

6.APP啟動優化,主要針對冷啟動優化

6.1 可以通過新增環境變數可以打印出APP的啟動時間分析(Edit scheme -> Run -> Arguments) 冷啟動的三大階段:1.dyld 2.runtime 3.main

6.1.1 dyld:Apple的動態聯結器,可以用來裝在Mach-0檔案

優化:

減少動態庫,合併一些動態庫

減少Objc類,分類的數量,減少Selector數量,定期清理沒有使用的類,分類

減少C++虛擬函式數量

swift儘量使用struct代替類

6.1.2 runtime:

呼叫map_images進行可執行檔案內容的解析和處理

在load_images中呼叫call_load_methods,呼叫所有Class和Category的+load方法

進行各種objc結構的初始化(註冊Objc類,初始化類物件等)

通過C++靜態初始化器和_attribute_((constructor))修飾的函式

到此為止,可執行檔案和動態庫中的所有符號(Class,Protocol,Selector,IMP...)都已經按格式成功載入到記憶體中,被runtime所管理

優化:用+initialize+單例代替+load

6.1.3 呼叫main函式

優化:在不影響使用者體驗的前提下,儘可能將一些操作延遲,不要全部放在finishLaunching中

6.1.4 二進位制重排推薦文章:https://juejin.cn/post/6844904174287585287

7.APP瘦身

7.1 圖片資源進行無失真壓縮

7.2 去除沒用到的資源:https://github.com/tinymind/LSUnusedResources https://github.com/netyouli/WHC_ScanUnreferenceImageTool

7.3 檢測未使用的程式碼:https://github.com/netyouli/WHC_Scan