一.卡頓優(yōu)化
■盡量用輕量級的對象 ,比如用不到事件處理的地方,可以考慮使用CALayer取代UIView
■不要頻繁地調用UIView的相關屬性 ,比如frame趾浅、bounds、 transform等屬性 ,盡量減少不必要的修改
■盡量提前計算好布局 ,在有需要時一-次性調整對應的屬性,不要多次修改屬性
■Autolayout會比直接設置frame消耗更 多的CPU資源
■圖片的size最好剛好跟UlImageView的size保持一 致
■控制一下線程的最大并發(fā)數(shù)量
■盡量把耗時的操作放到子線程
-文本處理(尺寸計算馒稍,繪制)
-圖片處理(解碼皿哨,繪制)
■ 盡量避免短時間內大量圖片的顯示,盡可能將多張圖片合成- -張進行顯示
■GPU能處理的最大紋理尺寸是4096x4096 , - -旦超過這個尺寸,就會占用CPU資源進行處理,所以紋理盡量不要超過這個尺寸
■盡量減少視圖數(shù)量和層次
■減少透明的視圖 ( alpha<1 ) , 不透明的就設置opaque為YES
■盡量避免出現(xiàn)離屏渲染
■哪些操作會觸發(fā)離屏渲染 ?
1.光柵化, layer . shouldRasterize = YES
2.遮罩, layer.mask
3.圓角,同時設置layer. masksToBounds = YES、layer. cornerRadius大于0
(考慮通過CoreGraphics繪制裁剪圓角 ,或者叫美工提供圓角圖片)
4.陰影, layer. shadowXXX
如果設置了 layer. shadowPath就不會產生離屏渲染
卡頓檢測
■平時所說的 “卡頓”主要是因為在主線程執(zhí)行了比較耗時的操作
■可以添加Observer到主線程RunLoop中,通過監(jiān)聽RunLoop狀態(tài)切換的耗時,以達到監(jiān)控卡頓的目的
二.耗電優(yōu)化
■盡可能降低CPU纽谒,GPU功耗
■少用定時器
■優(yōu)化I/O操作
1.盡量不要頻繁寫入小數(shù)據(jù)证膨,最好批量一次性寫入
2.讀寫大量重要數(shù)據(jù)時,考慮用dispatch, io ,其提供了基于GCD的異步操作文件I/O的API。用dispatch io系統(tǒng)會優(yōu)化磁盤訪問
3.數(shù)據(jù)量比較大的,建議使用數(shù)據(jù)庫(比如SQLite佛舱、 CoreData )
■網(wǎng)絡優(yōu)化
1.減少椎例、壓縮網(wǎng)絡數(shù)據(jù):
2.如果多次請求的結果是相同的,盡量使用緩存
3.使用斷點續(xù)傳,否則網(wǎng)絡不穩(wěn)定時可能多次傳輸相同的內容
4.網(wǎng)絡不可用時,不要嘗試執(zhí)行網(wǎng)絡請求
5.讓用戶可以取消長時間運行或者速度很慢的網(wǎng)絡操作,設置合適的超時時間
6.批量傳輸,比如,下載視頻流時,不要傳輸很小的數(shù)據(jù)包,直接下載整個文件或者- 大塊一大塊地下載请祖。如果下載廣告,一次性多下載一些,然后再慢慢展示订歪。如果下載電子郵件, 一次下載多封,不要一封一封地下載
■定位優(yōu)化
1.如果只是需要快速確定用戶位置,最好用CLLocat ionManager的requestLocation方法。定位完成后,會自動讓定位硬件斷電
2.如果不是導航應用,盡量不要實時更新位置,定位完畢就關掉定位服務
3.盡量降低定位精度,比如盡量不要使用精度最高的kCLLocat ionAccuracyBest
4.需要后臺定位時,盡量設置pausesLocat ionUpdatesAutomatically為YES ,如果用戶不太可能移動的時候系統(tǒng)會自動暫停位置更新
三.啟動優(yōu)化
app啟動過程
1.APP的啟動由dyld主導,將可執(zhí)行文件加載到內存,順便加載所有依賴的動態(tài)庫
2.并由runtime負責加載成objc定義的結構所有初始化工作結束后, dyld就會調用main函數(shù)
3.接下來就是UIApplicationMain函數(shù), AppDelegateapplication:didFinishLaunchingWithOptions:方法
■按照不同的階段優(yōu)化
- dyld
1.減少動態(tài)庫肆捕、合并一 些動態(tài)庫(定期清理不必要的動態(tài)庫)
2.減少Objc類刷晋、 分類的數(shù)量、減少Selector數(shù)量(定期清理不必要的類慎陵、分類)
3.減少C+ +虛函數(shù)數(shù)量- Swift盡量使用struct
- runtime
用+initialize方法和dispatch. once取代所有的 attribute ((constructor)). C+ +靜態(tài)構造器眼虱、ObjC的+load - main
在不影響用戶體驗的前提下 ,盡可能將一些操作延遲,不要全部都放在finishLaunching方法中
四.安裝包瘦身
安裝包( IPA )主要由可執(zhí)行文件、資源組成
■資源(圖片席纽、音頻捏悬、視頻等)
■采取無損壓縮
1.去除沒有用到的資源: https://github.com/tinymin/LSUnusedResources
可執(zhí)行文件瘦身
■編譯器優(yōu)化
- Strip Linked Product、Make Strings Read-Only润梯、Symbols Hidden by Default設置為YES
2.去掉異常支持 , Enable C++ Exceptions过牙、Enable Objective-C Exceptions設置為NO,Other C Flags添加-fno-exceptions
3.利用AppCode ( https://www.jetbrains.com/objc/ )檢測未使用的代碼:菜單欄-> Code -> Inspect Code