2012-06-25 161 views
1

這可能是一個非常簡單的問題,但我有點困惑,應該如何做到這一點。我讀到我需要刪除這行代碼:不重複的UITableView單元格

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

但是,然後如何檢查如果單元格不是零?下面是我使用的完整代碼。如果有人還可以請解釋什麼目的這行:

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 

回答

4

您使用它的權利在你發佈的代碼:

static NSString *CellIdentifier = @"Cell"; 

全部代碼。擁有靜態類型修飾符的原因是爲了防止每次調用方法時創建和初始化變量。 「正常」變量會自動創建並在每個方法刪除,你實際上可以做到這一點:

auto NSString* cellId = @"CellId"; 

auto類型修飾符是默認(編譯器將其添加),並節省打字的人不添加它。通過將static放在該類型的前面,可以更改此行爲,以便在程序啓動時僅將變量初始化一次。它被稱爲static,因爲每次調用該方法時,具有類型修飾符static的變量中的數據不會自動從堆棧中移除...它是靜態的/不會更改。由此得名。

由於您一次又一次地使用了單元格ID,因此每次調用該方法時,它只有一次性能優勢,只能初始化一次,而不是創建/刪除變量。對於有很多單元格的表格,這可能尤其如此。不過,我從來沒有看到使用autostatic變量之間的差異,但這至少是它背後的想法。

你不應該刪除[tableView dequeueReusableCellWithIdentifier:CellIdentifier];行。您需要這樣才能從tableview中出列表格視圖單元格。

+0

哦好吧謝謝。但我仍然不明白如何刪除該行dequeueReusableCellWithIdentifier –

+0

已更新的答案,您在哪裏閱讀過,您應該刪除該行? – Andreas

+0

right right:http://www.iphonedevsdk.com/forum/iphone-sdk-development/33977-uitableviewcell-how-not-reuse-cell.html –