UITableView自定义单元格,滚动和内存管理

时间:2010-11-22 15:32:05

标签: iphone objective-c ipad uitableview

所以我有一个表视图,我正在填充自定义表格单元格。我遇到的问题是当大量项目开始填充表格时滚动开始变慢。 (我已经实现了一个动态滚动,因此当用户滚动时,有一个方法可以从服务器中取出下一个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 个答案:

答案 0 :(得分:1)

所以我在我的一个用于获取数据的数据控制器类中发现了一个根深蒂固的内存泄漏。这就是造成经济放缓的原因。我看到了大量的内存使用情况,但是仪器没有检测到泄漏。只是去展示好旧的手动调试。 :) 谢谢您的帮助。

答案 1 :(得分:1)

如果泄漏工具没有显示任何内容,有时可能值得使用堆镜头。 文章在这里: http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/

答案 2 :(得分:0)

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

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