此刻我真的很沮丧。使用标识符对可重用单元格进行排队始终返回null。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
NSLog(@"INIT");
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
return cell;
}
我在这里做错了什么?感谢。
答案 0 :(得分:5)
你正在做的一切正常,一切正常。 iOS将创建足够的新单元格来填充屏幕(加一)。只有当UITableView
包含的行数超过一个屏幕上的行数然后用户滚动时,它才会重新开始重复使用这些单元格。
你会发现,如果你有一个数据源会说,其中有100个项目,然后滚动,你只会显示你的日志消息11次(取决于你的屏幕上有多少个单元格)而不是100因为iOS会在您滚动时开始回收单元格。
对于大型列表,它将使用太多内存为UITableView
中的每个可能行创建新视图。另一种方法是在滚动时为行分配新视图。但是,这会产生性能瓶颈,导致任何UITableView
中的延迟滚动。
Apple提到了性能瓶颈in their documentation on UITableView
s。
重用细胞。 - 对象分配具有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表视图时。如果重用单元格而不是分配新单元格,则可以极大地提高表格视图的性能。
答案 1 :(得分:0)
您是否设置了单元格的重用标识符?使用-initWithStyle:reuseIdentifier:
初始化您的单元格,或在IB中设置标识符。