UITableViewCell的重用機制和解決方法

2022-10-10 09:33:15 字數 1755 閱讀 2168

uitableview為了做到顯示與資料的分離, 單獨使用了乙個叫uitableviewcell的檢視用來顯示每一行的資料, 而tableview得重用機制就是每次只建立螢幕顯示區域內的cell,通過重用識別符號identifier來標記cell, 當cell要從螢幕外移入螢幕內時, 系統會從重用池內找到相同識別符號的cell, 然後拿來顯示, 這樣本是為了減少過大的記憶體使用, 但在很多時候, 我們會自定義cell,這時就會出現一些我們不願意看到的現象, 下面就介紹一些解決這些問題的方法

uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:@"cell" forindexpath:indexpath]; // 這句**就是造成cell的重用的**

在cell中我布局了左邊乙個imageview, 右邊乙個label, 總共顯示20行

1 - (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath 

7return

cell;

8 }

在cellforrow這個方法中可以看到當row等於5時, 我將imageview的背景顏色變為綠色, 按理說20行中應該只有第五行的imageview為綠色, 但是實際效果呢, 看下圖

可以明顯看到不止第五行, 11, 17行也變成了綠色, 這就是cell的重用造成的乙個我們不願意看到的問題, 當第5行移出螢幕時, 被系統放入了重用池內, 當要顯示第11行時,系統優先從重用池內找到了5行的cell, 造成其上的imageview也被複製過來了, 下面簡單介紹一些解決cell重用的方法

給每個cell做乙個tag標記,對cell將要展示的差異內容進行判斷

1 - (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath 

8if (cell.tag != 5

) 11

return

cell;

12 }

2.將cell的identifier設為唯一的, 保證了唯一性

1     nsstring *identifier = [nsstring stringwithformat:@"

%ld%ldcell

", indexpath.section, indexpath.row];

2 mytableviewcell *cell =[tableview dequeuereusablecellwithidentifier:identifier forindexpath:indexpath];

3.不使用系統的重用機制, 此方法在資料量較大時會造成過大的記憶體使用

1    mytableviewcell *cell =[tableview cellforrowatindexpath:indexpath];
4.刪除將要重用的cell上的所有子檢視, 得到乙個沒有內容的cell

1 [(uiview*)[cell.contentview.subviews lastobject] removefromsuperview];

關於解決cell的重用的方法還有很多, 就不在此一一介紹了, 希望能給你一點感悟

計算UITableViewCell高度

uitableview是先執行 cgfloat tableview uitableview tableview heightforrowatindexpath nsindexpath indexpath函式計算整個uitableview內容高度,然後才執行 uitableviewcell table...

UITableViewCell重用問題

在寫sina 微博介面的過程中使用到了cell,那麼就是在cell上新增一些控制項,但是由於每條微博的內容都是不同的,所以在顯示的過程中,出現了內容重疊的問題,其實就是uitableviewcell重用機制的問題。cpp view plain copy uitableviewcell tablevi...

UITableViewCell重用機制

uitableview是ios開發中使用頻率非常高的乙個控制項,它常被用來展示資訊列表,儘管資訊資料可能非常多,但uitableview消耗的資源卻並不會隨著展示資訊的增多而變大,這都要得益於uitableviewcell的重用機制,重用機制 顧名思義,就是反覆利用資源的機制。以下通過一些 來看下通...