cell重用機制

2021-07-11 12:23:27 字數 2039 閱讀 9149

i       ios

裝置的記憶體有限,如果用

uitableview

顯示成千上萬條資料,就需要成千上萬個

uitableviewcell

物件的話,那將會耗盡

ios裝置的記憶體。要解決該問題,需要重用

uitableviewcell物件

n重用原理

:當滾動列表時,部分

uitableviewcell

會移出視窗,

uitableview

會將視窗外的

uitableviewcell

放入乙個物件池中,等待重用。當

uitableview

要求datasource

返回uitableviewcell

時,datasource

會先檢視這個物件池,如果池中有未使用的

uitableviewcell

,datasource

會用新的資料配置這個

uitableviewcell

,然後返回給

uitableview

,重新顯示到視窗中,從而避免建立新物件

n還有乙個非常重要的問題

:有時候需要自定義

uitableviewcell(

用乙個子類繼承

uitableviewcell)

,而且每一行用的不一定是同一種

uitableviewcell

,所以乙個

uitableview

可能擁有不同型別的

uitableviewcell

,物件池中也會有很多不同型別的

uitableviewcell

,那麼uitableview

在重用uitableviewcell

時可能會得到錯誤型別的

uitableviewcell

n解決方案

:uitableviewcell

有個nsstring

*reuseidentifier

屬性,可以在初始化

uitableviewcell

的時候傳入乙個特定的字串標識來設定

reuseidentifier(

一般用uitableviewcell

的類名)

。當uitableview

要求datasource

返回uitableviewcell

時,先通過乙個字串標識到物件池中查詢對應型別的

uitableviewcell

物件,如果有,就重用,如果沒有,就傳入這個字串標識來初始化乙個

uitableviewcell物件

cell

的重用**

- (uitableviewcell

*)tableview:(

uitableview

*)tableview cellforrowatindexpath:(

nsindexpath

*)indexpath 

// 4.

設定cell

的屬性...

//記憶體中開闢空間,耗效能

// static

修飾區域性變數,可以保證區域性變數值分配一次記憶體空間

(只初始化一次)//

不使用巨集,因為只有這乙個方法裡面要使用這個變數,不希望外部能夠使用到

static

nsstring

*cellid =

@"hero"

;// 1.

首先通過

@「a」

標示符去快取池裡找有沒有可以迴圈利用的

cell

uitableviewcell

*cell = [tableview

dequeuereusablecellwithidentifier

:cellid];

// 2.

如果找不到可以利用的

cell

,就建立

if(cell ==

nil)

cell重用機制

對於程式而言,記憶體控制是必不可少的。如果乙個tableview中有1000個cell,乙個個建立的話會消耗很大的記憶體,很容易出現記憶體報警,cell的重用機制就是為了節省記憶體的一種機制。只建立螢幕能顯示的最大個數的cell,然後重複使用這些cell,對cell進行單獨的顯示分配,這樣既不影響顯...

cell的重用機制

ios開發ui篇 uitableviewcell的效能問題 一 uitableviewcell的一些介紹 uitableview的每一行都是乙個uitableviewcell,通過datasource的 tableview cellforrowatindexpath 方法來初始化每 行 uitabl...

iOS tableView可重用cell的兩個方法

dequeuereusablecellwithidentifier dequeuereusablecellwithidentifier forindexpath 這兩個方法的區別總結下。storyboard自定義cell 如果使用 storyboard 並且,在 storyboard 中指定了 單元...