【ios開發】UITableViewCell的重用

移動開發須要解決的一個問題就是資源稀缺的問題。多數狀況下是內存問題。ios

雖然如今的手機都號稱大內存,高配置。可是移動app所佔用的資源也在跟着不斷膨脹,app

也是形成內存不足的主要緣由。ide

 

在前面的例子中,還記得咱們是怎樣建立UITableView的cell的嗎?優化

若是不記得,沒有關係,請看下面的代碼:spa

 

在這個方法調用過程當中,每次都會實例化一個UITableViewCell,一個cell表明一個內存地址。code

當數據量不是很大的狀況下,問題不是很明顯。可是若是數據不少的話,那麼這個方法在實例化cell的時候就會申請大量的內存,blog

以知足程序的正常運行。隊列

 

假如咱們有100條數據,那麼程序要顯示完這100條數據的話,就要向系統申請100個內存地址。內存

可是若是咱們把TableView從頂部滾動到底部,而後再從底部滾回到頂部,內存地址的需求就變爲200個。資源

由於咱們都知道,屏幕上每顯示一行數據,tableView: cellForRowAtIndexPath:方法就被調用一次。

每次調用都會從新分配內存,這顯然不是一個好的實現。apple做爲一個很是重視用戶體驗的公司,不可能不會發覺這個問題的。

 

UITableViewCell的重用

原理:假如屏幕最多能顯示10條數據,當第一次啓動程序,這10個內存地址一次分配完成,而後咱們向下滾動TableView,

當第一行cell超出屏幕範圍不可見後,這個cell所佔的地址就能夠被重用。若是還不明白的請看下圖。

小聲的說一下,andriod開發中listview的優化跟ios中UITableView思想基本同樣。

 

 

TableView提供了下面的方法幫咱們達到重用cell的目的:

- (id)dequeueReusableCellWithIdentifier:()NSString *identifier

UITableView內部維護了一個可重用cell的隊列,使用上面的方法,咱們能夠在該隊列中取出可重用的cell。
可是隻有當隊列中有數據時這個方法才返回UITableViewCell的實例,不然返回nil。所以咱們要確保cell被成功初始化。

下面咱們從新改造cellForRowAtIndexPath方法



在viewDidLoad方法中添加下面的代碼,該方法能確保cellForRowAtIndexPath方法中返回的cell不爲nil


最後說明一下這個reuseIdentifier的做用,當咱們的界面中有多個TableView的時候,
這幾個TableView中的cell類型不必定相同,那麼就可使用它來標識咱們重用的是哪種類型的cell。
下面是代碼中reuseIdentifier的定義:
相關文章
相關標籤/搜索