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

Jon*_*nah 89 iphone scroll uitableview uiimage ios

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

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

玻滚动与 - 的UITableView

更玻滚动与 - 的UITableView

有没有人有任何提高uitableview滚动性能的技巧?

rpe*_*ich 155

  1. 缓存行的高度(表视图可以经常请求)
  2. 为表中使用的映像创建最近最少使用的缓存(并在收到内存警告时使所有非活动条目无效)
  3. 如果可能UITableViewCelldrawRect:话,尽可能地绘制所有内容以避免子视图(或者如果您需要标准的辅助功能,内容视图drawRect:)
  4. 使你UITableViewCell的图层不透明(如果有的话,内容视图也一样)
  5. 使用UITableView示例/文档中建议的reusableCellIdentifier功能
  6. 避免未预烘烤成梯度/复杂的图形效果UIImage小号

  • 此外,下载的图像应缩小到imageView的大小,然后才能在单元格上显示! (4认同)
  • 我想在这个答案中添加一个我过去几年的经验 - 拥有透明单元可能永远不会导致滚动性能不佳.我们有一个非常复杂的细胞(20多个子视图)的应用程序,它显示背景都是透明的.通过适当的优化,即使在3GS上,透明度也没有差别.实际上,最慢减速的东西是在有足够的单元格从表格视图中出列之前的nib加载.如果使用子视图,只需确保具有有效的层次结构,并且您不需要使用drawRect. (3认同)

Sha*_*rog 40

  1. 如果您是子类 UITableViewCell,请不要使用Nib,而是将其写入代码中.它比加载Nib文件快得多.
  2. 如果您正在使用图像,请确保您正在缓存它们,这样您就不必为每个图像加载多次(如果您有内存 - 您会惊讶于图像占用了多少空间).
  3. 使尽可能多的元素不透明.同样,尽量不要使用具有透明度的图像.

  • 下来的选票可能是因为"避免笔尖"是提高绩效的不好建议.如果您正在重复使用单元格,则在滚动时根本不会从笔尖重建单元格. (79认同)
  • 根据Cocoa with Love研究,Nibs的速度相当,或者速度稍快一些.http://www.cocoawithlove.com/2010/03/load-from-nib-or-construct-views-in.html (6认同)
  • 别担心......那是巨魔.很好的答案! (3认同)
  • 使用NIB****可能**在**构建单元时变慢**.如果您正在使用单元格回收,则只分配足够的单元格来填充屏幕; 比如说,最多可能是10个.滚动时,不会创建单元格.他们只是**重用**,而不是解除分配和重新分配.当然,dealloc没有成本.所以不,这不正确. (3认同)

ben*_*eno 34

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

快速滚动功能于特威特与 - 的UITableView

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

TableViewSuite

  • 原文可以在这里阅读:http://web.archive.org/web/20100922230053/http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/ (3认同)