假设我使用以下样板代码cellForRowAtIndexPath
方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Set up the cell...
cell.textLabel.text = [some_array objectAtIndex:indexPath.row];
//Track the cell
self.track_Cell = cell ; //<------<<----<<----Suppose I do something like this
return cell;
}
现在假设我的班级有以下属性
@property(strong , nonatomic) UITableViewCell* track_Cell;
现在我读到如果我将在UITableview
中显示的数组总共有10个项目且UITableview可见显示只能显示5行,那么在这种情况下只有所需的可见{ {1}} +2将被创建。所以在这种情况下只会创建七个。 (我从here读到)。我也理解使用UITableViewCell
的好处是回收已创建的dequeueReusableCellWithIdentifier:CellIdentifier
。如果UITableViewCell不在视图中,那么它将被回收。例如,如果第10行不在视图中,那么用于显示第10行的相同UITableViewCell
可能会用于显示第3行(如果我错了,请纠正我)。说完我的问题是:
使用以下语句(我在代码中使用过)是危险的。特别是考虑到我的表通过附加到不同的NSMutableArray进行过滤
UITableviewCell*
我之所以感到危险是因为我假设我有一个 track_Cell = cell ;
来显示索引为2的数组中的数据。现在,因为UITableviewCell*
被回收,所以可能有可能同样的UITableviewCells*
可能指向该数组中的索引9而不是索引2.因此,假设它总是指向第二行,将指针保存到UITableviewCell是错误的。如果我的理解是错误的,请纠正我。
答案 0 :(得分:1)
尽量坚持indexPath
而不是细胞本身。在任何时候,您都可以通过调用cellForRowAtIndexPath:
来获取表示该indexPath的单元格。
您对表格视图单元格回收的理解是正确的,相同的单元格可能在时间t = 0表示indexPath 0-0,但可能在时间t = 5时,它可能代表indexPath 0- 5。