首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollectionView numberOfItemsInSection:在刷新导致滞后/冻结的可见单元格时,为整个视图中的每个部分调用

UICollectionView numberOfItemsInSection:在刷新导致滞后/冻结的可见单元格时,为整个视图中的每个部分调用
EN

Stack Overflow用户
提问于 2017-03-27 21:31:42
回答 1查看 152关注 0票数 0

在我的应用程序中,我有一个选择模式,允许选择UICollectionView中的单元格,然后将其用于各种操作。启用选择模式时,我刷新可见单元格,以便显示选择模式指示符。单元格的大小保持不变,并在设置UICollectionView's布局时设置为硬编码值(以及节头大小)。

我的UICollectionView将它的项组织成部分,使用NSFetchedResultsController作为底层数据源。NSFetchedResultsController使用节名称值。使用NSFetchedResultsController获取的核心数据包含许多实体(有时超过100,000)和部分(有时超过5,000)。

这方面的核心数据方面工作得很好-获取有点昂贵,但总体上是合理的。我没有设置一个获取限制FWIW (但这样做,即使是抓取大小为25,我没有看到性能上的差异)。

尽管具有良好的核心数据性能,但当我进入选择模式时,我会体验UI滞后/冻结。我做了一些分析,我看到当我进入选择模式时,每个部分都会调用numberOfItemsInSection方法。因此,应用程序有时调用numberOfItemsInSection 5000次时,进入选择模式!每个单独的调用都是相对轻量级的,但根据推断,每5000次调用都会导致明显的UI滞后/冻结。UICollectionViewController似乎将此作为其布局/更新视图逻辑的一部分,但我不知道为什么它需要了解所有的部分.

我想知道为什么在我的UICollectionView控制器中使用节时,我必须为每个部分调用numberOfItemsInSection --大小应该是一致的,那么为什么要重新布局视图呢?

EN

回答 1

Stack Overflow用户

发布于 2017-03-28 18:40:05

我不知道为什么对reloadItemsAtIndexPaths的调用会导致集合视图更新它的节项计数。

一个可能的解决办法是:确保获取的结果控制器正在缓存节数据,以避免在没有对存储进行更改的情况下需要昂贵查询的这些项计数。

初始化​结果​控制器的实例时,通常会指定缓存名。(如果不指定缓存名称,则控制器不会缓存数据。)创建控制器时,它会查找具有给定名称的现有缓存.

https://developer.apple.com/reference/coredata/nsfetchedresultscontroller#1661453

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43056814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档