dequeueReusableCellWithIdentifier如何:处理不同的indexPath?

时间:2011-05-10 08:20:36

标签: objective-c ios uitableview ios4

让我们看看tableview的一些标准代码

- (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个项目,那么它将为每个indexPath.row

分配10个单元格

我的问题是 函数reuseIdentifier:CellIdentifier如何知道不同的行?

1 个答案:

答案 0 :(得分:3)

  

如果我们在数组中有10个项目,那么它   将为每个分配10个单元格   indexPath.row

这不是真的 - 通常分配的单元格数将是NumberOfVisibleRows + 2(或类似的值)。

这是(粗略地)UITableView的工作原理:一旦某个单元格滚出可见区域,它就会从UITableView视图层次结构中删除(将表格的clipToBounds属性设置为NO,你将能够看到它!)并将其放入某种内部缓存。 dequeueReusableCellWithIdentifier:方法检查是否有可在该缓存中重用的单元并返回它(如果没有单元可用则返回nil) - 因此您不需要再分配单元格,然后实际适合可见区域。

dequeueReusableCellWithIdentifier方法不依赖于当前的indexPath,而是依赖于传递给它的单元字符串标识符。 indexPath仅供您用于获取单元格的适当内容。