代码之家  ›  专栏  ›  技术社区  ›  gabaum10

uiTableView自定义单元格、滚动和内存管理

  •  2
  • gabaum10  · 技术社区  · 14 年前

    所以我有一个表视图,我用自定义的表单元格填充它。我遇到的问题是,当许多项目开始填满表格时,滚动时速度开始减慢。(我已经实现了一个动态滚动,所以当用户滚动时,有一个方法可以从服务器中取出下一个x项,这样他们就可以滚动到心脏的内容,而无需刷新/按下任何内容。)

    现在,我从我在ib中构建的自定义模板创建单元格,并对其进行如下初始化:

     CustomCellClass *cell = (CustomCellClass *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
        cell = (CustomCellClass *)[nib objectAtIndex:0];
    }
    

    在这种情况下,内存管理应该如何工作,这样我就不会最终占用大量的内存并减慢滚动速度?如有任何帮助/建议/见解,我们将不胜感激。谢谢!

    编辑:我已经检查了内存泄漏,所以这不应该是问题所在。

    3 回复  |  直到 14 年前
        1
  •  1
  •   gabaum10    14 年前

    因此,我在一个用于获取数据的数据控制器类中发现了一个根深蒂固的内存泄漏。这就是导致经济放缓的原因。我看到了大量的内存使用,但仪器没有检测到泄漏。只是为了显示没有什么比良好的旧手动调试更好的了。:)谢谢你的帮助。

        2
  •  1
  •   MCannon    14 年前

    如果泄漏工具没有显示任何内容,那么有时使用堆快照是值得的。 文章内容如下: http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/

        3
  •  0
  •   cbranch    14 年前

    您为管理表单元格显示的代码片段看起来很好。

    从您的描述来看,瓶颈似乎是从服务器(Web服务?)进行的实际数据检索。。您是在主线程上进行Web服务调用还是在单独的线程上进行Web服务调用?如果您还没有这样做,也许您可以在单独的线程上调用Web服务,并创建“占位符”单元格,这些单元格在Web服务完成后将被刷新。这应该保持用户界面的响应性,尽管您不必立即看到每个单元格中的数据(例如,在数据可用之前,它可能会说“正在加载”或类似的内容)。