目标C:有效地循环NSArray中特定范围的元素

时间:2014-06-27 20:45:14

标签: ios objective-c loops nsarray

我想快速循环通过NSArray的一部分,例如从具有1000个对象的数组中的位置700到950。

我不认为使用[array objectAtIndex:index]这是一个很好的方法,因为它比使用for(数组中的Object * obj)的快速迭代慢

在这种情况下,最好的方法是什么?我正在考虑使用

for(Object * obj in [array subarrayWithRange]])但不确定开销是多少,因为将为此创建一个子数组。

还有其他好的选择吗?

2 个答案:

答案 0 :(得分:4)

您可以使用enumerateObjectsAtIndexes:枚举NSIndexSet中索引的数组,该数组可以从范围生成。

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(700, 950)];

[array enumerateObjectsAtIndexes:indexSet options:kNilOptions usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

}];

答案 1 :(得分:0)

我认为使用subarrayWithRange:的开销很小,因为它不会复制原始数组,只是在它周围创建一个薄包装并引用回原始对象。

当然,您必须对其进行实际剖析并查看它是否过高。