iOS 性能優(yōu)化 (二) 如何優(yōu)化(圓角優(yōu)化另開一章)

一:針對CPU

1.文本的計算放到分線程,Coretext或Textkit進行相關繪制
2.圖片解碼放到子線程
3.圓角重新子線程繪制一張圖片
4..避免 對象創(chuàng)建,對象銷毀,對象調整,盡量少用addView給Cell動態(tài)添加View,可以初始化時就添加,然后通過hide來控制是否顯示
5.減少subviews的數(shù)量
6.避免重復計算,比如 緩存高度,只計算一次,根據(jù)數(shù)據(jù)源計算出對應的布局,并緩存到數(shù)據(jù)源中(ps:如果現(xiàn)在要顯示100個Cell,當前屏幕顯示5個。那么刷新(reload)UITableView時,UITableView會先調用100次

tableView:heightForRowAtIndexPath:

方法,然后調用5次

tableView:cellForRowAtIndexPath:

方法;滾動屏幕時,每當Cell滾入屏幕,都會調用一次

tableView:heightForRowAtIndexPath:
tableView:cellForRowAtIndexPath:

二:針對GPU

  1. 多視圖混合情況
    (1)背景不透明,盡量少用或不用透明圖層:確??丶膐paque屬性設置為true,確保backgroundColor和父視圖顏色一致且不透明如無特殊需要,不要設置低于1的alpha值
    (2)確保UIImage沒有alpha通道
    2.圖片相關
    (1)確保圖片大小和frame一致,保證字節(jié)對齊,不要在滑動時縮放圖片,縮放消耗時間
    (2)圖片格式png:確保圖片顏色格式被GPU支持,避免勞煩CPU轉換
    3.字節(jié)對齊
    Core Animation在圖像數(shù)據(jù)非字節(jié)對齊的情況下渲染前會先拷貝一份圖像數(shù)據(jù),
    32位對應rgb和alpha,字節(jié)對齊不進行額外計算 像素不對齊:會繼續(xù)合成紋理,消耗資源
    4.慎用離屏渲染
    絕大多數(shù)時候離屏渲染會影響性能 ,盡量其它方法實現(xiàn)
    設置圓角、陰影、模糊效果,光柵化都會導致離屏渲染
    設置陰影效果是加上陰影路徑
    滑動時若需要圓角效果,開啟光柵化

三:解碼圖像

一般我們使用的圖像是JPG/PNG,這些圖像數(shù)據(jù)不是位圖,而是是經(jīng)過編碼壓縮后的數(shù)據(jù),使用它渲染到屏幕之前需要進行解碼轉成位圖數(shù)據(jù),這個解碼操作是比較耗時的,并且沒有GPU硬解碼,只能通過CPU,iOS默認會在主線程對圖像進行解碼。很多庫都解決了圖像解碼的問題,不過由于解碼后的圖像太大,一般不會緩存到磁盤,SDWebImage的做法是把解碼操作從主線程移到子線程,讓耗時的解碼操作不占用主線程的時間。

四:內(nèi)存映射

平常我們讀取磁盤上的一個文件,上層API調用到最后會使用系統(tǒng)方法read()讀取數(shù)據(jù),內(nèi)核把磁盤數(shù)據(jù)讀入內(nèi)核緩沖區(qū),用戶再從內(nèi)核緩沖區(qū)讀取數(shù)據(jù)復制到用戶內(nèi)存空間,這里有一次內(nèi)存拷貝的時間消耗,并且讀取后整個文件數(shù)據(jù)就已經(jīng)存在于用戶內(nèi)存中,占用了進程的內(nèi)存空間。

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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容