让我们看看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如何知道不同的行?
答案 0 :(得分:3)
如果我们在数组中有10个项目,那么它 将为每个分配10个单元格 indexPath.row
这不是真的 - 通常分配的单元格数将是NumberOfVisibleRows + 2(或类似的值)。
这是(粗略地)UITableView的工作原理:一旦某个单元格滚出可见区域,它就会从UITableView视图层次结构中删除(将表格的clipToBounds属性设置为NO,你将能够看到它!)并将其放入某种内部缓存。 dequeueReusableCellWithIdentifier:
方法检查是否有可在该缓存中重用的单元并返回它(如果没有单元可用则返回nil) - 因此您不需要再分配单元格,然后实际适合可见区域。
dequeueReusableCellWithIdentifier
方法不依赖于当前的indexPath,而是依赖于传递给它的单元字符串标识符。 indexPath仅供您用于获取单元格的适当内容。