1

我有一个带有自定义布局的大型数据集(> 2000 个项目)的 UICollectionViewController。使用部分,滚动性能变得非常不稳定。使用 Instruments 和一些测试,我确定这是由于在布局中查找 ( layoutAttributesForElementsInRect:)。我在 中缓存布局属性prepareLayout,并以我所知道的最快方式在这里查找它们:

[elementsInfo enumerateKeysAndObjectsUsingBlock:^(NSIndexPath *indexPath, UICollectionViewLayoutAttributes *attributes, BOOL *innerStop) {

   if (CGRectIntersectsRect(rect, attributes.frame)) [allAttributes addObject:attributes];

}];

我发现大约 25% 的 cpu 时间都花在了枚举上,主要是在[NSIndexPath isEqual:]. 所以,我需要一种更快的方法来散列这些值。

这一定是可能的,因为我使用相同的数据和分段的 UICollectionViewFlowLayout 进行了交叉测试,并且很顺利。

4

1 回答 1

2

好吧,事实证明使用数组而不是字典,并且通过 NSPredicate 进行过滤要快得多,因为在这种情况下,索引是已知的。

于 2013-02-04T16:56:57.847 回答