基本上我使用的是默认UICollectionViewFlowLayout
。当我使用insertSections
时,确实需要一些时间。特别是如果用户滚动这会带来一些口吃。我使用自动布局,在自定义UICollectionViewCell
上放置标签。我将单元格和我的补充视图(标题)出列。这里没什么特别的。
以下是 Time Profiler 的屏幕截图:
您可以在此处看到prepareLayout
的{{1}}消耗了三分之一的可用CPU功率。是否有可能加快速度?例如。为UICollectionViewFlowLayout
,layoutAttributesForElementsInRect:
,layoutAttributesForItemAtIndexPath:
,collectionViewContentSize
编写自定义方法?这种方法看起来怎么样?
我做的其他观察:
添加部分的次数越多,插入部分(约420个项目)所需的时间越长prepareLayout
。我每次都会添加相同数量的商品。我用仪器做了一些测试。当口吃发生时,CPU使用率超过100%。真正的内存使用量正在增加,但我以大约60 MB结束了我的测试。当时在数据集中加载了大约48.000个单元格(大约45个单元始终在屏幕上)。加载单元格后,滚动工作流畅(CPU最大约100%,但只有很短的时间,用户不会注意到)。在另一个测试中,分配的总字节数大约是1.6 GB,但持久性保持在低水平。如果插入新的部分,帧也会下降到0。
我试图远离单元格的自动布局,为单元格使用不透明的背景颜色,使用剪辑绑定单元格,使用performBatchUpdates
等等。细胞不重叠,不应使用分数值(圆形宽度)。我根本不使用阴影。我也试图评论出来,看看有什么问题,但我认为它必须是必不可少的。我在模拟器和不同设备上进行了测试。
有没有人知道如何在插入部分时提高性能?
答案 0 :(得分:1)
图像附件的调用树中有很多未解析的符号。您可以尝试缩小其中一个仅包含MonthView
应用程序的调用树函数的性能问题。
尝试检查Hide System Libraries
并使用Debug
作为构建配置,以便您可以观察这些符号并导航到应用中的特定代码。
一旦您清楚您的集合视图数据源或委托对UICollectionView
框架级别的性能问题没有贡献,那么您可以花费精力找到最小化此类集合视图部分更新的方法
也许您的单元格自动布局配置非常复杂,您可以简化它吗?
虽然在没有真正查看您的集合视图单元格所具有的内容的情况下很难理解。