为什么调用insertRowsAtIndexPaths:为所有行调用heightForRow?

时间:2012-06-23 18:33:49

标签: iphone ios cocoa-touch uitableview uikit

当你拥有大量细胞时,

heightForRowAtIndexPath是一项非常昂贵的操作。在我的情况下,我有成千上万,所以我想我可能会分批打破桌子,一次只显示50个单元格,当用户接近表格视图边界的末尾时,使用insertRowsAtIndexPaths:插入50个以上行。但是,每次插入50个新行时,都会为表的所有行调用heightForRowAtIndexPath,而不仅仅是我刚插入的那些行。这是预期的行为吗?为什么是这样?行的高度必须用字体计算字符串的高度,因此每次插入新行时计算整个表的高度都是非常低效的。有没有解决方法?

2 个答案:

答案 0 :(得分:2)

  

这是预期的行为吗?为什么是这样?

是的,这使得可以将具有不同高度的行插入到一个表中。

  

有没有解决方法?

在初始化期间仅计算一次高度,以防所有行具有相等的高度 每次调用heightForRowAtIndexPath时,只需返回缓存的结果。

答案 1 :(得分:2)

我同意@Anne。需要调用它,因为表中的行位置(它只是一个滚动视图)是由它上面的行的位置和高度建立的。

@ Anne的处方也非常正确,这可以归结为使高度方法尽可能快地运行。

但真正的问题是给你的。我认为你应该问的“性能”问题是关于人的表现,翻阅1000行。

假设一次拇指轻弹可以滚动10行并在一秒钟内执行。那是每千分之1.5分钟。每天使用您的应用程序滚动5000行的一百万用户每年将耗费190万个工作日,从而按比例减少国内生产总值。

我祝你取得圆满成功,但在分发1000个UITableView行的应用程序之前,请考虑全球经济的不稳定状态。