我有一个带有大型数据集(> 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的相同数据进行了交叉测试,并且它很流畅。
答案 0 :(得分:2)
好吧,结果是使用数组而不是字典,并且NSPredicate的过滤速度要快得多,因为在这种情况下索引已经知道了。