iOS面試題:如何提升 tableview 的流暢度?

本質上是降低 CPU、GPU 的工作,從這兩個大的方面去提升性能。

  • CPU:對象的創(chuàng)建和銷毀、對象屬性的調整、布局計算、文本的計算和排版、圖片的格式轉換和解碼、圖像的繪制
  • GPU:紋理的渲染

卡頓優(yōu)化在 CPU 層面

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

卡頓優(yōu)化在 GPU層面

  • 盡量避免短時間內大量圖片的顯示,盡可能將多張圖片合成一張進行顯示
  • GPU能處理的最大紋理尺寸是 4096x4096,一旦超過這個尺寸,就會占用 CPU 資源進行處理,所以紋理盡量不要超過這個尺寸
  • 盡量減少視圖數(shù)量和層次
  • 減少透明的視圖(alpha<1),不透明的就設置 opaque 為 YES
  • 盡量避免出現(xiàn)離屏渲染

iOS 保持界面流暢的技巧

1.預排版,提前計算

在接收到服務端返回的數(shù)據(jù)后,盡量將 CoreText 排版的結果、單個控件的高度、cell 整體的高度提前計算好,將其存儲在模型的屬性中。需要使用時,直接從模型中往外取,避免了計算的過程。

盡量少用 UILabel,可以使用 CALayer 。避免使用 AutoLayout 的自動布局技術,采取純代碼的方式

2.預渲染,提前繪制

例如圓形的圖標可以提前在,在接收到網(wǎng)絡返回數(shù)據(jù)時,在后臺線程進行處理,直接存儲在模型數(shù)據(jù)里,回到主線程后直接調用就可以了

避免使用 CALayer 的 Border、corner、shadow、mask 等技術,這些都會觸發(fā)離屏渲染。

3.異步繪制
4.全局并發(fā)線程
5.高效的圖片異步加載

更多:iOS面試題合集

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容