提高iPhone UITableView滚动性能的技巧?

我有一个可用视图,在每个单元格中加载相当大的图像,单元格高度根据图像的大小而变化。 滚动的performance是体面的,但有时可能是生涩。

我发现了这些在FieryRobot博客上发现的提示:

玻滚动与-的UITableView

更玻滚动与-的UITableView

有没有人有任何提示uitableview滚动性能提示?

  1. caching行的高度(表视图可以频繁地请求这个)
  2. 为表格中使用的图像创build最近最less使用的caching(并在收到内存警告时使所有非活动条目失效)
  3. UITableViewCelldrawRect:绘制一切drawRect:如果可能的话,不惜一切代价避免子视图(或者如果你需要标准的可访问性function,内容视图的drawRect:
  4. 使你的UITableViewCell的图层不透明(如果你有一个内容视图也一样)
  5. 使用UITableView示例/文档build议的reusableCellIdentifierfunction
  6. 避免在UIImage中未预先UIImage的渐变/复杂graphics效果
  1. 如果您是UITableViewCell的子类,请不要使用Nib,而是将其写入代码中。 这比加载Nib文件要快得多。
  2. 如果您使用的是图片,请确保您将图片caching起来,这样您就不必每次都从文件中加载一次(如果您有内存 – 您会惊讶于图片空间占用多less)。
  3. 使尽可能多的元素不透明。 同样,不要尝试使用具有透明度的图像。

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

快速滚动function于特威特与-的UITableView

此外,苹果公司已经在TableViewSuite教程中更新了自己的TableView示例代码(也许是为了响应这个)?

TableViewSuite

UITableView滚动的#1性能杀手是在任何单元格视图图层上绘制阴影,所以如果滚动性能重要,那么不要做阴影,除非基本上不会减慢你的主线程。

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

UITableView滚动性能的任何问题都可以使用其他答案中已经描述的技术来解决。 然而,许多时候,performance不佳的原因是由于某些内在的错误或重复造成的。

UITableView重用单元的事实,以及每个单元可能需要它自己的图像的事实一起使得解决scheme有点复杂。 从一般的解决办法来看,我总结了一些应该注意的事情:

  1. 将数据加载到数据源 – 从REST /数据库。 这一步应该在后台完成,最终使用dispatch_async和GCD队列。
  2. 创build并初始化相关数据模型对象并将其放入数组中
  3. [tableView reloaddata]
  4. cellForRowAtIndexPath ,包含将从数组的正确数据模型对象中设置数据(文本)的代码。
  5. 现在图像也可能以URL的forms存在,所以这个步骤可能会有些古怪,因为表视图完成了单元重用。 事实的核心是使用asynchronous队列从设备caching/ URL再次加载图像,然后将其设置为正确的cell.image(无论您的单元格图像属性)。

为避免出现问题,请参阅本教程,了解如何在表视图中延迟加载图像 。