我很确定我在这里做的是对的,但我只是想检查一下[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,还是我感到困惑?
答案 0 :(得分:2)
不,它实际上是按标识符存储单元格对象。
首次创建表格时,将从头开始创建单元格。 因此,当您滚动tableview时,新单元格将根据标识符出列。出于性能原因,可以通过例如在单元格上设置文本来重用它;因此无需从头开始创建新单元格。