UITableView滚动性能paradoxon:制作子视图或使用-drawRect:?

时间:2010-04-09 13:12:02

标签: iphone uitableview

我正在阅读thourg this example (link) ...

从描述中,这对我来说似乎是悖论:

  

实现表格视图单元格时,   最优之间存在紧张关系   滚动性能和最佳   编辑/重新排序性能。您   通常应该使用中的子视图   单元格的内容视图。

     

进行编辑或重新排序时   控制,使用子视图使   实施更容易,而且   动画效果更好,因为   UIKit不需要重绘   动画。

结论:子视图更快,因为UIKit在动画期间不得重绘。所以在滚动时,它不能一直调用-drawRect:正确?

然后,矛盾:

  

但是,如果内容很复杂   (超过三个子视图),   滚动性能可能会受到影响。如果   你可以成为一个问题   而是直接在子视图中绘制   表格视图单元格的内容视图。

结论:首选-drawRect:直接在表格视图上绘制。复杂单元的滚动性能更好。比许多子视图更好。

那么,那么。什么是真的?子视图或-drawRect:哪个更好?

在我的情况下,我希望每个单元格有12个子视图。他们真的只是想说这个吗? “如果您最多只有3个子视图,请使用它们。但如果您还有更多,请使用-drawRect:并直接在单元格上绘制。”但那时:为什么不总是更喜欢-drawRect:那么?

1 个答案:

答案 0 :(得分:6)

您可以将其总结为仅显示Vs功能。如果您的单元格的任务只是显示不会发生太大变化且保持静态的数据,请绘制它。如果您的单元格的任务是功能,可以更改位置或由用户操纵(或者您有自定义动画),请查看使用子视图。

这并没有一个硬性规定。您的用例可以很好地衡量哪种方法最佳。有12个子视图,我会立即倾向于定制绘图以获得速度优势。

  

为什么不总是更喜欢-drawRect:那么?

使用子视图可以免费获得很多东西。动画“更容易”。例如,使用UIImageView显示图像可以免费突出显示。这实际上取决于你的细胞的任务。