2010-12-08 45 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时,新单元将根据标识符出列。出于性能原因,可以通过例如在单元上设置文本来重用它;所以不需要从头开始创建新的细胞。