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

don*_*ile 4 iphone uitableview

我正在阅读这个例子(链接) ...

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

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

当您具有编辑或重新排序控件时,使用子视图可以使实现更容易,并且动画效果更好,因为UIKit不必在动画期间重绘.

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

然后,矛盾:

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

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

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

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

dan*_*aby 6

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

对此没有真正的硬性规定.您的用例可以很好地衡量哪种方法最佳.通过12个子视图,我立即倾向于定制绘图以获得速度优势.

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

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