iOS的優化

面試的時候,優化的問題,問的挺多的
iOS的優化分為很多,卡頓優化,耗電優化,啟動優化,網絡優化等

卡頓優化

首先的問題是,為什么會卡頓呢?
因為CPU或者GPU所花費的時間過長,導致垂直信號來的時候,CPU計算或者GPU渲染未完成,從而掉幀。
那么就是可以從兩方面來入手卡頓優化,CPU和GPU

CPU優化

那就是盡量減少CPU的計算量,盡可能的減少需要CPU的自動適配的設置,盡可能的減少線程的并發數量
1.盡量使用輕量級的對象,比如用不到事件處理的地方,可以考慮使用使用CALayer取代UIView
2.不要頻繁地使用UIView的相關屬性,比如frame,bounds,transform等屬性,盡量減少不必要的修改
3.盡量提前計算好布局,在有需要時一次性調整對應的屬性,不要多次修改屬性
4.Autolayout會比直接設置frame消耗更多的CPU資源
5.圖片的size最好剛好跟UIImageView的size保持一致
6.控制線程最大并發數
7.盡量把耗時操作放到子線程去執行:
文本處理(尺寸計算、繪制)
圖片處理(解碼、繪制)

GPU優化

GPU的優化方面,就是盡量減少渲染的難度
1.盡量避免短時間內大量圖片的顯示,盡可能的多張圖片合成一張進行顯示
2.GPU能處理的最大紋理尺寸為4096X4096,一旦超過這個尺寸,就會占用CPU資源進行處理,所以處理盡量不要超過這個尺寸
3.盡量減少視圖數量和層次
4.減少透明的視圖(alpha < 1),不透明的就設置opaque為YES
5.盡量避免出現離屏渲染

APP啟動優化

這個問題首先要搞明白APP啟動的時候做了什么事情
iOS APP啟動做了什么
了解了之后,我們就可以對其進行優化,

針對dyld的優化

1.減少動態庫,合并一些動態庫,定期清理不必要的動態庫
2.減少OC類,分類的數量,減少Selector數量,定期清理不必要的類和分類
3.減少C++虛函數的數量
4.Swift盡量使用struct

針對runtime的優化

用+initialize方法和dispatch_one取代所有的attribute((constructor)), C++靜態構造器, OC的+load

針對main的優化

1.在不影響用戶體驗的前提下,盡可能將一些操作延遲,不要全部都放在didFinishLaunching方法中
2.按需加載

耗電優化

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。