2011-05-10 53 views
1

讓我們來看看實現代碼如下的一些標準規範如何dequeueReusableCellWithIdentifier:處理不同的indexPath?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    static int count = 0; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     NSLog(@"count %d", count++); 
    } 
    // Configure the cell... 
    cell.textLabel.text = [array objectAtIndex:indexPath.row]; 
    return cell; 
} 

如果我們在陣列10個項目,那麼它將ALLOC 10個細胞的每個indexPath.row

我的問題是 請問該功能reuseIdentifier :CellIdentifier知道不同的行?

回答

3

如果我們在陣列10個項目,那麼它就會 ALLOC 10個細胞的每個 indexPath.row

這是不正確的 - 通常數量分配單元將NumberOfVisibleRows + 2(或相似的價值)。 (大致)UITableView是如何工作的:一旦某個單元格從可見區域滾出,它將從UITableView視圖層次結構中移除(將表格的clipToBounds屬性設置爲NO,您將可以看到!),並將其放入到某種內部緩存。 dequeueReusableCellWithIdentifier:方法檢查是否存在可在該緩存中重用的單元並將其返回(並且如果沒有單元可用,則返回nil) - 因此,您不需要分配更多的單元,然後實際適合可見區域。

dequeueReusableCellWithIdentifier方法不依賴於當前indexPath,而是依賴於傳遞給它的單元格字符串標識符。 indexPath僅用於爲單元格獲取適當的內容。

-1

哦,方法**dequeueReusableCellWithIdentifier**:與indexPath無關。

當使用UITableView時,我們使用[[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault] reuseIdentifier:cellIdentifier]將一個非常親切的單元格放入緩存(可能是一個NSMutableDictionary)中,並使用鍵'cellIdentifier'。然後,當我們需要一個單元時,我們首先查詢緩存,如果錯過了,我們創建一個新緩存。

indexPath是編碼員的責任。按區域分隔不同類型的單元格,並在一節中逐行顯示單元格。部分和行組成了一個NSIndexPath

相關問題