提高iPhone UITableView滚动性能的诀窍?

时间:2009-08-29 21:51:04

标签: ios iphone uitableview scroll uiimage

我有一个uitableview,在每个单元格中加载相当大的图像,单元格高度根据图像的大小而变化。滚动表现不错,但有时可能会生涩。

我在FieryRobot博客上找到了这些提示:

glassy-scrolling-with-uitableview

more-glassy-scrolling-with-uitableview

有没有人有提高uitableview滚动性能的提示?

5 个答案:

答案 0 :(得分:153)

  1. 缓存行的高度(表视图可以经常请求)
  2. 为表中使用的图像创建最近最少使用的缓存(当收到内存警告时,使所有非活动条目无效)
  3. UITableViewCell drawRect:中绘制所有内容,如果可能的话,不惜一切代价避免使用子视图(或者如果您需要标准辅助功能,内容视图的drawRect:
  4. 让您的UITableViewCell图层不透明(如果有的话,内容视图也是如此)
  5. 使用UITableView examples / documentation
  6. 建议的reusableCellIdentifier功能
  7. 避免使用未预先加入UIImage s
  8. 的渐变/复杂图形效果

答案 1 :(得分:40)

  1. 如果您是子类 UITableViewCell,不要使用笔尖, 把它写在代码中代替。这很多 比加载Nib文件更快。
  2. 如果您正在使用图片,请确保 你正在缓存他们,所以你没有 必须从文件加载超过 每一次(如果你有的话) 记忆 - 你会感到惊讶 太空图像占用了很多)。
  3. 使尽可能多的元素不透明 可能。同样,尽量不要使用 具有透明度的图像。

答案 2 :(得分:34)

Tweetie背后的开发人员已经写了很多关于此的内容,并且有一些代码可以演示如何为该应用程序完成它。基本上,他/她提倡每个表格单元格一个自定义视图,并手动绘制(而不是使用Interface Builder进行子视图,以及其他选项)。

fast-scrolling-in-tweetie-with-uitableview

此外,Apple已在其TableViewSuite教程中更新了自己的TableView示例代码(可能是为了回应?)

TableViewSuite

答案 3 :(得分:1)

用于UITableView滚动的#1>性能杀手是在任何单元格视图层上绘制阴影,因此如果滚动性能很重要,那么除非基本上不会减慢主线程,否则不要执行阴影。

认为必须这样说,因为没有一个被接受的答案提到了阴影和层次。 :+)

答案 4 :(得分:0)

UITableView滚动性能的任何问题都可以使用其他答案中已描述的技术来解决。然而,很多次表现迟缓是由于某种本身错误或重复的原因造成的。

UITableView重用单元格的事实,以及每个单元格可能需要自己的图像的事实 - 一起使解决方案变得复杂。从一般的解决方法来看,我总结了应该注意的事项:

  1. 将数据加载到数据源中 - 来自REST /数据库。此步骤应在后台完成,最终使用dispatch_async和GCD队列。
  2. 创建并初始化相关数据模型对象并将它们放入数组
  3. [tableView reloaddata]
  4. cellForRowAtIndexPath内,包含将从数组的正确数据模型对象设置数据(文本)的代码。
  5. 现在图像也可能是URL的形式,所以这一步可能有点古怪,因为表视图完成了单元重用。事实的核心是使用异步队列再次从设备缓存/ URL加载图像,然后将其设置为正确的cell.image(无论您的单元格图像属性是什么)。
  6. 为避免出现问题,请参阅本教程,了解表格视图中的lazy loading of images