2010-12-08 49 views
3

我很確定我在這裏做的是正確的,但我只是想檢查[cell autorelease]是不是太快釋放我的單元格,並且dequeueReusableCellWithIdentifier排隊等待重用的單元格。我的理解是,隊列是一個單獨的實體,就像存儲單元格藍圖一樣(有點像筆尖),而不是實際的對象?UITableViewCell,出隊和autorelease?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LOC_ID"]; 
    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LOC_ID"]; 
     [cell autorelease]; 
    } 
    NSUInteger row = [indexPath row]; 
    //id thisLocation = [locationList objectAtIndex:row]; 
    [[cell textLabel] setText:[NSString stringWithFormat:@"R_%u", row]]; 
    return cell; 
} 

編輯:爲了澄清,我感興趣的是關於生命週期和細胞會發生什麼。我知道我分配他們,然後autorelease他們,然後表格從cellForRowAtIndexPath返回後獲取單元格的所有權?所以他們十個屬於UITableView,或者我感到困惑?

回答

2

不,它實際上是爲每個標識符存儲單元對象。

當表格第一次創建時,單元格是從頭開始創建的。 因此,當您滾動tableview時,新單元將根據標識符出列。出於性能原因,可以通過例如在單元上設置文本來重用它;所以不需要從頭開始創建新的細胞。