IOS - reloadData 有多贵?
Posted
技术标签:
【中文标题】IOS - reloadData 有多贵?【英文标题】:IOS - How expensive is reloadData? 【发布时间】:2012-09-13 23:03:57 【问题描述】:我想知道 tableView 上的 reloadData 有多昂贵。我想每 5 秒刷新一次表格视图。这会导致任何性能问题吗?
【问题讨论】:
无论谁早先否决了这个问题,老实说,我觉得这不是一个坏问题。 (至少告诉菜鸟为什么不应该发布这样的问题而不仅仅是投反对票) 唯一真正的答案是让您使用 Instruments 并测量您的代码。您的代码将与其他任何人的代码运行方式不同。做看起来最好的事情,然后衡量。然后根据任何较差的性能特征进行更改。是的,我对每个询问性能相关问题的人的回答都是一样的——因为这是唯一真正的答案,直到你真正得到硬性能数据。 【参考方案1】:重新加载数据将调用表格视图数据源上的两个主要方法numberOfRowsInSection
,然后根据 tableView 的 contentOffset
迭代 cellForRow:atIndexPath:
以获得所需的可见单元格
如果您的应用已经很好地滚动,那么您的应用将承受的唯一性能损失是您在 numberOfRowsInSection
中做大量工作(例如访问网络或一些耗时的事情)。
编辑:如前所述,如果您使用heightForRow:atIndexPath:
对不同高度的单元格进行复杂计算,也可能是一个痛点。
【讨论】:
太棒了。感谢您回答问题。我的行高是恒定的,行内没有复杂的计算。【参考方案2】:除了@Jessedc 的回答,
如果所有行的高度相同,则heightForRowAtIndexPath
比tableview.rowHeight
贵。
如果您有很多行,每行的高度各不相同,并且每次调用 heightForRowAtIndexPath
方法时都在计算行的高度,那么它的开销会更大。
决定reloadData
通话的费用有很多因素。一切都取决于每次调用委托方法时您做了什么以及做了多少。
【讨论】:
【参考方案3】:如果适用于您的情况,NSFetchedResultsController 可以在数据更改时通知您的表视图,而不是每“n”秒刷新一次。
【讨论】:
以上是关于IOS - reloadData 有多贵?的主要内容,如果未能解决你的问题,请参考以下文章