提高iPhone UITableView滚动性能的技巧?
我有一个可用视图,在每个单元格中加载相当大的图像,单元格高度根据图像的大小而变化。 滚动的performance是体面的,但有时可能是生涩。
我发现了这些在FieryRobot博客上发现的提示:
玻滚动与-的UITableView
更玻滚动与-的UITableView
有没有人有任何提示uitableview滚动性能提示?
- caching行的高度(表视图可以频繁地请求这个)
- 为表格中使用的图像创build最近最less使用的caching(并在收到内存警告时使所有非活动条目失效)
- 在
UITableViewCell
的drawRect:
绘制一切drawRect:
如果可能的话,不惜一切代价避免子视图(或者如果你需要标准的可访问性function,内容视图的drawRect:
- 使你的
UITableViewCell
的图层不透明(如果你有一个内容视图也一样) - 使用
UITableView
示例/文档build议的reusableCellIdentifierfunction - 避免在
UIImage
中未预先UIImage
的渐变/复杂graphics效果
- 如果您是
UITableViewCell
的子类,请不要使用Nib,而是将其写入代码中。 这比加载Nib文件要快得多。 - 如果您使用的是图片,请确保您将图片caching起来,这样您就不必每次都从文件中加载一次(如果您有内存 – 您会惊讶于图片空间占用多less)。
- 使尽可能多的元素不透明。 同样,不要尝试使用具有透明度的图像。
Tweetie背后的开发人员已经写了很多关于这个,并有一些代码,演示如何完成该应用程序。 基本上,他/她主张每个表单元的一个自定义视图,并手动绘制(而不是使用Interface Builder进行子视图,以及其他选项)。
快速滚动function于特威特与-的UITableView
此外,苹果公司已经在TableViewSuite教程中更新了自己的TableView示例代码(也许是为了响应这个)?
TableViewSuite
UITableView滚动的#1性能杀手是在任何单元格视图图层上绘制阴影,所以如果滚动性能重要,那么不要做阴影,除非基本上不会减慢你的主线程。
认为这是必须说的,因为没有一个被接受的答案提到了阴影和层次。 :+)
UITableView
滚动性能的任何问题都可以使用其他答案中已经描述的技术来解决。 然而,许多时候,performance不佳的原因是由于某些内在的错误或重复造成的。
UITableView
重用单元的事实,以及每个单元可能需要它自己的图像的事实一起使得解决scheme有点复杂。 从一般的解决办法来看,我总结了一些应该注意的事情:
- 将数据加载到数据源 – 从REST /数据库。 这一步应该在后台完成,最终使用dispatch_async和GCD队列。
- 创build并初始化相关数据模型对象并将其放入数组中
-
[tableView reloaddata]
- 在
cellForRowAtIndexPath
,包含将从数组的正确数据模型对象中设置数据(文本)的代码。 - 现在图像也可能以URL的forms存在,所以这个步骤可能会有些古怪,因为表视图完成了单元重用。 事实的核心是使用asynchronous队列从设备caching/ URL再次加载图像,然后将其设置为正确的cell.image(无论您的单元格图像属性)。
为避免出现问题,请参阅本教程,了解如何在表视图中延迟加载图像 。