日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TableView的优化

發布時間:2023/11/29 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TableView的优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:什么是TableView的優化以及為什么要優化

?

1)CPU(中央處理器)和GPU(圖形處理器):CPU主要從事邏輯計算的一些工作;GPU主要從事圖形處理方面的工作。

?

2)CPU和GPU的共同點:

?

都有自己的緩存體系,都有自己的數字和邏輯運算單元,都為了完成計算任務而設計。

?

3)CPU和GPU的不同點:

?

CPU的核少但是核內空間非常大,能夠處理復雜的邏輯。

?

GPU核多但是每個核的空間相對較小,故而處理復雜邏輯的空間較少。

?

針對CPU和GPU的上述不同,面對一個程序系統分配給CPU的往往是較為復雜的邏輯運算,分配給GPU的通常是圖片等控件的操作。

?

4)上述不同而導致的結果:

?

當程序員為CPU編程時,傾向于用復雜的邏輯結構優化算法來減少計算任務的時間Latency。

?

為GPU編程->利用其能夠處理海量數據的優勢,來提高總的數據的吞吐量,來掩蓋Latency。

?

5)為什么優化?

?

學術上:平衡CPU和GPU在工作上的壓力,從而正確的使用CPU和GPU的資源,使他們均勻的負載 這樣子使得FPS保持在60幀左右,最終使得用戶體驗更加美好。

?

非學術上:掌握UITableView能夠給面試加分。

?

二:UITableView的工作原理

?

1)tablewView代理方法的執行順序。

?

UITableView返回多少組----->每組返回多少行cell--->計算每個cell的高度---->指定cell(cell布局)

?

2)cell的復用。

?

原理:當滾動列表時(UITableView)部分cell會移除Window 但是移除的cell并沒有被立即釋放 而是放到了一個叫做復用池的對象池中,處于待定狀態,當有新的cell要出現在Window界面上時,首先會從復用池中尋找是否有相同類型的cell,如果有直接拿過用(最直觀的表現是新出現的cell有沒有開辟新的內存空間),如果沒有,創建一個新的類型的cell,所以UITableView可能擁有多種類型的cell,復用池也可能存儲著多種類型的cell,系統通過定義reuseIndentifer作為每個cell的唯一標示符來確定即將出現的cell復用何種類型的cell。

?

三:UITableView的具體優化

?

1)盡量使用cell的復用。

?

使用cell的復用,可以減少內存的開銷,沒有開辟新的空間,也減少了一些計算量。

?

2)對于不定高的cell 提前將每個cell的高度存入數組,出現一個cell的時候,直接從數組中拿出確切的高度即可,不用臨時計算cell的高度。

?

圖文混排、評論 。

?

對于固定高的cell和不定高的cell同樣適用。

?

3)涉及網絡請求加載數據在UITableView滑動結束的時候在進行加載數據(渲染)避免卡頓。

?

1、UITableView繼承自UIScrollView,繼承了后者的方法。

//滑動結束的方法

- (void)scrollViewDidEndDragging:(UIScrollView?*)scrollView willDecelerate:(BOOL)decelerate

//減速結束之后的方法

- (void)scrollViewDidEndDecelerating:(UIScrollView?*)scrollView

?

2、if(self.tableView.dragging==NO&&self.tableView.decelerating==NO)在tableView必須實現的二個方法中(加載cell的方法中)將數據的渲染寫在上述if語句中。

?

4)對于tableView的自定義控件 尤其是UIImageView,盡量減少使用圓角,陰影等layer屬性,盡量減少使用alpha(透明度)來設置透明度,(在項目開發中,讓UI設計師設計原圖就是帶圓角的圖) 陰影,圓角這些layer效果都是在GPU中完成的。

?

1、當多個視圖重疊時,GPU會進行合成渲染,而渲染的最慢的操作就是混合,因此當視圖結構太過復雜,就會大量消耗GPU的資源,所以當一個空間本身是不透明,注意設定alpha為1,這樣可以避免無用的alpha通道合成,降低GPU的負載。

?

2、對控件設置cornerRadius后對其進行clip或mask操作時 會導致offscreenrendering這個也是在GPU中進行的 如果在滑動時 圓角對象太多 回到GPU的負載大增幅。

?

這時我們可以設置layer的shouldRasterize屬性為YES,可以將負載轉移給CPU 更徹底的是直接使用帶圓角的原圖。

?

5)盡量使用懶加載

?

又稱為延遲加載 實際上是重寫某個對象的getter方法 原理:程序一開始并不對它進行初始化 而是在用到他的時候 才為他開辟內存供它使用。

?

好處:

?

1、不必將創建的對象的代碼全部寫在ViewDidLoad中,代碼可讀性強。

?

2、每個控件的getter方法,分別負責各自的實例化處理,代碼彼此之間獨立性強 松耦合。

?

6)減少返回給的cell里面的處理邏輯和處理時間。

?

驢媽媽為例:各個UI控件整合到一起,實際上只有一個控件。

?

7)設置每個cell的opaque屬性 ----面試亮點

?

opaque意思是不透明的 渾濁的 有YES和NO二個結果

?

alpha 透明度

?

如果控件本身不透明,我們設置opaque為YES。

?

8)分段加載數據

?

設置分頁加載數據,也就是上拉刷新和下拉加載。

?

轉載于:https://www.cnblogs.com/fengmin/p/5497082.html

總結

以上是生活随笔為你收集整理的TableView的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。