UITableView 不重用单元格?

Posted

技术标签:

【中文标题】UITableView 不重用单元格?【英文标题】:UITableView doesn't reuse cells? 【发布时间】:2009-09-24 15:06:52 【问题描述】:

大家早上好。

我在 3.1 应用程序中遇到了与表格视图有关的小问题。我有一个表格视图,其中一些复杂的 tableViewCells 从笔尖加载,它们没有被重用。感觉这可能与从笔尖加载它们有关,我决定尝试一个简单的测试项目,看看是否只使用基本的苹果模板代码来重用单元格。我从基于导航的模板开始,这里是 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] autorelease];
    

    // Configure the cell.
    cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    return cell;

我在下一行设置了一个断点,每次通过都会调用它。

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]

在构造函数中设置reuseIdentifier:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"] autorelease];
    

产生相同的结果,不重复使用单元格。

提前感谢您提供的任何帮助!

【问题讨论】:

【参考方案1】:

表格通常会在需要开始重用之前创建和使用几个单元格(通常是 5 个左右)。这当然取决于它们有多大以及在任何给定时间出现在屏幕上的数量。没什么好担心的。

【讨论】:

所以它不像模板那样重用它?考虑到苹果谈论重用的程度,这似乎有点奇怪。 视情况而定。你有多少行?标准表一次可以容纳大约 8 行左右可见的行,因此它们需要是唯一的对象。但如果你说,20 行,你仍然只有 8 个左右的对象,它们会在滚动进出视图时被回收。【参考方案2】:

我不确定您所说的每次、每次应用打开时是什么意思?

使用对象分配工具运行代码,并在滚动 tableview 时查看对象分配图表。如果即使经过几次滚动,对象分配也会线​​性增加。那你就有问题了。

【讨论】:

【参考方案3】:

尝试将 CellIdentifier 设为静态,例如

static NSString *CellIdentifier = @"Cell";

【讨论】:

以上是关于UITableView 不重用单元格?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 不使用情节提要重用单元格

UITableView - 在编辑模式下重用单元格

UITableView 和单元格重用

UITableView 单元格中的可重用单元格存在问题

从自定义单元格返回 NSIndexPath ? (UITableView)

IOS UITableView检查一个单元格