UITableViewCell重用機制

2021-09-06 18:38:20 字數 1653 閱讀 6823

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

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

//處理邏輯

return cell;

}如上所看到的,通常我們會呼叫uitableviewcell*cell = [tableview dequeuereusablecellwithidentifier: cellidentifier];語句來獲取標識為@"normalcell"的可重用的cell,假設有標識為@"normalcell"的cell,則返回乙個cell;否則返回nil。若上面語句的返回值為nil,我們就須要建立乙個新cell。上面這樣的獲取cell的方式即是uitableviewcell的重用機制。舉個形象樣例:當前的uitableview一次最多可顯示8個cell,我們有100個cell須要顯示出來,那麼當uitableview初始化時顯示的是1-8的cell,這時候沒有可重用的cell,所以每乙個cell都須要新建,當我們把uitableview向上拖動,這時候第1個cell尚未全然離開可見檢視,第9個cell須要顯示部分,這時也是沒有可重用的cell,所以第9個cell也是須要新建的,當第1個cell全然離開可見檢視後即被**回去標記為可重用,如今當須要顯示第10個cell時就可以獲取到可重用的cell,所以第10個cell是不須要新建的,它使用的即是被**的第1個cell,後面的以此類推,所以展示100個cell僅僅須要新建9個cell就能夠了。

結合網路資料及ios的sdk能夠猜測uitableviewcell的重用機制是這樣實現的:

在uitableview中應該有乙個可變字典來儲存可重用的cell:nsmutabledictionary*reusabletablecells;在uitableview剛初始化的時候reusabletablecells中的內容為空,當有cell離開可見檢視時,系統就會依據cell的可重用標識把cell儲存到reusabletablecells中,實現方式類似例如以下**:

-(void)addreuseblecell:(uitableviewcell *)cell

[reusecellset addobject:cell];

[reusabletablecells setobject:reusecellsetforkey:reuseidentifier];

}獲取可重用cell的方法- (id)dequeuereusablecellwithidentifier:(nsstring *)identifier的實現方式類似例如以下**:

-(id)dequeuereusablecellwithidentifier:(nsstring *)identifier

id anyobject = [reusecellset anyobject];

[reusecellset removeobject:anyobject];

return anyobject;

}至此,uitableviewcell的重用機制的解說完成。

計算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標頭檔案,會找到nsmutablearray visiablecells,和nsmutabledictnery reusabletablecells兩個結構。visiablecells內儲存當前顯示的cells,reusabletablecells儲存可重用的cells。t...