UITableViewCell,出队和自动释放?

时间:2010-12-08 16:21:59

标签: iphone objective-c cocoa-touch uitableview

我很确定我在这里做的是对的,但我只是想检查一下[cell autorelease]是不是太快释放了我的单元格而且dequeueReusableCellWithIdentifier排队等待重复使用的单元格。我的理解是,队列是一个单独的实体,与存储单元格的蓝图(有点像笔尖)而不是实际对象一样多吗?

- (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;
}

编辑: 澄清我对生命和细胞的情况感兴趣。我知道我分配它们然后自动释放它们,表格是否从cellForRowAtIndexPath返回后获取单元格的所有权?所以他们十个属于UITableView,还是我感到困惑?

1 个答案:

答案 0 :(得分:2)

不,它实际上是按标识符存储单元格对象。

首次创建表格时,将从头开始创建单元格。 因此,当您滚动tableview时,新单元格将根据标识符出列。出于性能原因,可以通过例如在单元格上设置文本来重用它;因此无需从头开始创建新单元格。