gpt4 book ai didi

ios - UICollectionView 在插入或删除很多项目时非常慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:50 27 4
gpt4 key购买 nike

我正在尝试从 Collection View 中插入和删除大量项目(例如 20,000),并且该操作需要很长时间。

我创建的测试夹具由以下部分组成:

  • UICollectionView 除了数据源之外没有任何配置。
  • 默认 UICollectionViewFlowLayout
  • 根据 BOOL 变量返回 10K 或 30K 项的数据源。
  • 切换该变量的按钮。当设置为 YES 时,将向数据源添加 20K 项(仅通过更改 numberOfItemsInSection:)和包含 20K 项的 insertItemsAtIndexPaths:。当设置为 NO 时,deleteItemsAtIndexPaths: 会调用 20K 项。
  • 数据源中的单元格配置除了将默认的 UICollectionViewCell 出列并返回它之外什么都不做。

在模拟器上运行它,它应该比任何设备都快,产生以下时间:

  • 插入 20K 项:220 毫秒。
  • 删除相同的 20K 项:1100 毫秒。

无论如何,这是非常慢的,尤其是在主线程上执行时。

这是仪器的屏幕截图,显示了 UICollectionView 内部实现中的热点(具体来说,_computeItemUpdates):

Instruments

我注意到使用 reloadData 而不是插入或更新项目要快得多(~20 毫秒),可能是因为没有触发动画,所以不需要计算每个项目的位置用于动画目的的项目和部分。

任何关于如何克服这个问题的想法都将不胜感激。

最佳答案

展开 _computeItemUpdates。如果它所呼唤的东西是你的,那么是的,你可以。

例如,如果您正在使用自定义布局,您可以要求它在后台线程上计算新位置,然后在该操作完成时调用插入/删除。

你也可以聪明一点,只为当前可见的范围调用插入/删除,然后在重新排列动画完成后你可以 reloadData 并且它看起来应该与用户没有太大区别观点。

关于ios - UICollectionView 在插入或删除很多项目时非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com