1

在这一点上我真的很沮丧。使用标识符出列可重用单元始终返回 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;
}

我在这里做错了什么?谢谢。

4

2 回答 2

5

你做的一切都是正确的,一切都在正常工作。iOS 将创建足够多的新单元格来填满屏幕(加一个)。UITableView只有当您包含的行数超出一个屏幕的容量并且用户滚动时,它才会开始重用这些单元格。

你会发现如果你有一个数据源会说,里面有 100 个项目,然后滚动,你的日志消息可能只会显示 11 次(取决于你的屏幕上有多少单元格),而不是 iOS 会显示的 100 次滚动时开始回收单元格。

对于大型列表,它会使用太多内存来为UITableView. 另一种方法是在滚动时为行分配新视图。但是,这会造成性能瓶颈,导致任何UITableView.

Apple在他们关于UITableViews的文档中提到了性能瓶颈。

重复使用细胞。- 对象分配有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表视图时。如果您重用单元格而不是分配新单元格,则可以大大提高表格视图的性能。
于 2013-01-27T05:24:01.547 回答
0

您是否设置了单元格的重用标识符?使用 初始化您的单元格-initWithStyle:reuseIdentifier:,或在 IB 中设置标识符。

于 2013-01-27T03:52:14.613 回答