關於TableViewCell的重用機制

 static NSString *CellTableIdentifier = @"CellTableIdentifier ";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:CellTableIdentifier] autorelease];
}

以下是我自己對cell 的重用的理解,給大家分享:
先說一下重用是如何實現的,加入我們有一個很長的tableview,假設是100行,但在我們設計的行高情況下,屏幕只能顯示4行,所以,當加載view的時候,實際我們需要創建5各cell,只這4個cell是靜態顯示,當我們用手指向上滑動即下方的第5個cell向上滑進界面的過程中,我們發現第一行的cell會滑出界面,當滑出後,第一行這個cell對象會被放到對應重用標示符重用隊列中,第5行顯示在屏幕上。當我繼續向上滑動,第二行的cell對象同樣會放在重用隊列中,第6個cell將獲得重用隊列中的一個cell,這樣,這樣在後面的重用中就就可以正常的工作起來了,可以很好的控制內存。

簡單的說,一行一行的cell都是在複用的,滑動tableview的時候,剛離開視圖的 cell會被放到複用池中,等下一個cell需要顯示時,會先看複用池中有沒有cell 如果有的時候,就從複用池中拿出來cell,沒有的話就重新創建cell 
static NSString *CellTableIdentifier = @"CellTableIdentifier ";
是重用標示符;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];  
  • 意思是定義一個cell,在tableview中的可重用隊列中尋找有CellTableIdentifier標識的UITableViewCell,以進行重用。
    這個Identifier可以由我們自由定義成一些字符串。當然,如果在隊列中有這樣的UITableViewCell,那麼則返回它給 cell,若沒有,則返回nil給cell。因爲我們在寫程序時經常需要用到好幾個表格,每個表格中的cell佈局都不一樣,所以我們需要將在同一個表格的cell(佈局一樣)進行標記Identifier,這樣,在重用的時候可以得到匹配的cell。當有多個表格是可以定義多個標記。
if (cell == nil) {
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:CellTableIdentifier] autorelease];
  • 若返回的是nil,即cell==nil,則我們需要分配空間並初始化一個cell,而且需要關聯reuseIdentifier,以便後面重用的時候能夠根據Identifier找到這個cell
  • 若cell不爲nil,則重用成功,並可return此cell。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章