为UICollectionView布局散列非常大的数据集的最快方法是什么... NSIndexPath太慢了

时间:2013-02-03 00:33:39

标签: ios6 nsdictionary uicollectionview fast-enumeration uicollectionviewlayout

我有一个带有大型数据集(> 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的相同数据进行了交叉测试,并且它很流畅。

1 个答案:

答案 0 :(得分:2)

好吧,结果是使用数组而不是字典,并且NSPredicate的过滤速度要快得多,因为在这种情况下索引已经知道了。