2011-12-08 73 views
3
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier ]; 
    if(cell == nil){ 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.text = [[views objectAtIndex:indexPath.row] objectForKey:@"title"]; 
    return cell; 
} 

爲什麼我們在這裏使用CellIdentifier,爲什麼它是靜態的?爲什麼我們使用cellIdentifier?

回答

0

電池回收已在previous question中解釋。靜態變量對於特定的.m文件是「全局」的,它們在類的所有實例之間共享。這是有道理的,因爲這個字符串只是一個標識符 - 爲每個類的實例分配一個相同字符串的實例將是一種浪費。

0

當您試圖通過出列它來重用一個單元格時,可以使用像標籤這樣的單元標識符來標識該單元格。

它是靜態的,因爲這種方式只能定義一次,但是它在該方法中的類的所有對象之間共享。

1

CellIdentifier是一種標記tableViewCells的方法。這樣uitableView可以知道當需要重新使用時需要將哪個uitableviewcell拉出來。

6

這個想法是,表視圖在使用後不一定會破壞單元,但可以回收它以提高性能。該標識符用於獲取正確的緩存單元格,而不是其他表格視圖。例如,如果您有兩種不同的單元格類型,那麼您甚至可以在同一個表格視圖中使用多個標識符。

想象一下,有一個由標籤和圖像視圖組成的單元格。當單元格被初始化時,單元格視圖需要被創建,標籤需要被創建並且圖像視圖需要被創建。現在,每種類型的單元格看起來都是一樣的,它們只在內容上有所不同。因此,不要每次都重新進行此設置,有時會返回未使用的單元格,只填寫新內容。

+0

在這種情況下,如果單元格將爲零,如果(cell == nil){cell [= [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; } – Nick

+0

您首先調用'[tableView dequeueReusableCellWithIdentifier:CellIdentifier];'。如果表格視圖仍然有一個未使用的單元格,它可以給你,所有你需要做的就是配置它。但是如果它沒有一個(例如,因爲表格要求您第一次生成單元格),那麼您需要創建它。 – DarkDust

+0

+1有一個很好的解釋。 – Imran

3

靜態變量只會被構造一次,並且它會在調用cellforrowatindexpath方法時始終避免創建內存。它的生命週期將通過該文件存在,因爲它是局部變量,而對於全局靜態,它的生存時間將通過out應用程序

相關問題