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

Ios6 什么';这是为UICollectionView布局散列非常大的数据集的最快方法…NSIndexPath太慢了,ios6,nsdictionary,uicollectionview,fast-enumeration,uicollectionviewlayout,Ios6,Nsdictionary,Uicollectionview,Fast Enumeration,Uicollectionviewlayout,我有一个UICollectionViewController,它有一个带有自定义布局的大数据集(>2000项)。使用区段时,滚动性能变得非常不稳定。通过使用工具和一些测试,我确定这是由于在布局中查找(layouttributesforelementsinrect:)。我在prepareLayout中缓存布局属性,并以我所知的最快方式在此处查找它们: [elementsInfo enumerateKeysAndObjectsUsingBlock:^(NSIndexPath *indexPath,

我有一个UICollectionViewController,它有一个带有自定义布局的大数据集(>2000项)。使用区段时,滚动性能变得非常不稳定。通过使用工具和一些测试,我确定这是由于在布局中查找(
layouttributesforelementsinrect:
)。我在
prepareLayout
中缓存布局属性,并以我所知的最快方式在此处查找它们:

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

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

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


这一定是可能的,因为我使用相同的数据对UICollectionViewFlowLayout进行了交叉测试,结果很顺利。

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

同意-我有一个包含3600个视图的大网格要排序。从NSDictionary切换到NSArray将我的枚举时间从几秒提高到几毫秒。