iOS dequeueReusableCellWithIdentifier始终返回null

rya*_*yan 1 uitableview ios

在这一点上我真的很沮丧.使用标识符对可重用单元格进行排队始终返回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;
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?谢谢.

Ale*_*lor 5

你正在做的一切正常,一切都在按预期工作.iOS将创建足够的新单元格来填充屏幕(加一).只有当您UITableView包含的行数超过一个屏幕上的行数然后用户滚动时,它才会开始重复使用这些单元格.

您会发现,如果您有一个数据源会说,其中有100个项目然后滚动,您只会显示您的日志消息11次(取决于屏幕上适合的单元格数量)而不是100,因为iOS将滚动时开始回收单元格.

对于大型列表,它将使用太多内存来为a中的每个可能行创建新视图UITableView.另一种方法是在滚动时为行分配新视图.但是,这会产生性能瓶颈,导致任何延迟滚动UITableView.

苹果提到的性能瓶颈及其对文档中的UITableView小号.

重复使用细胞. - 对象分配具有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表视图时.如果重用单元格而不是分配新单元格,则可以极大地提高表格视图的性能.