Iphone 数组子集上的Objective-C快速枚举?

Iphone 数组子集上的Objective-C快速枚举?,iphone,objective-c,ios,collections,nsarray,Iphone,Objective C,Ios,Collections,Nsarray,是否有一种简单的方法可以对数组中的一系列对象进行快速枚举?类似于 for (Object *object in myArray startingAtIndex:50) { //do stuff } …为了避免做这样的事情 for (Object *object in myArray) { NSUInteger index = [myArray indexOfObject:object]; if (index >= 50) { //do stuff

是否有一种简单的方法可以对数组中的一系列对象进行快速枚举?类似于

for (Object *object in myArray startingAtIndex:50) {
    //do stuff
}
…为了避免做这样的事情

for (Object *object in myArray) {
    NSUInteger index = [myArray indexOfObject:object];
    if (index >= 50) {
        //do stuff
    }
}
谢谢。

我想到了这些:

for (Object *object in [myArray subArrayWithRange:NSMakeRange(50, ([myArray count] - 49))]) {
    //do stuff
}
这会创建一个临时数组,因此可能比以下手动枚举速度慢(基准测试速度!):

NSUInteger arrayCount = [myArray count];
for (NSUInteger i = 50; i < arrayCount; i++) {
    Object *object = [myArray objectAtIndex];
    // do stuff
}
nsuiger数组计数=[myArray计数];
对于(整数i=50;i
如果
myArray
是不可变的,则
subrayWithRange:
可能不会复制指针,尽管
retain
可能仍必须发送到子数组中的所有内容

总的来说,这并不重要。老实说,我从未见过这样的情况:快速枚举与
indexOfObject:
的性能问题足以引起注意(总是有更糟糕的事情发生)

另一种方法;使用
enumerateBlock:
,只需从ranger之外的索引返回(并使用停止标志)

[myArray enumerateWithBlock:^(id o,整数i,布尔*f){
如果(i<10)返回;
如果(i>20){*f=YES;返回;}
…处理范围内的对象。。。
}];

(您甚至可以使用
选项:
变量同时枚举。)

必须通过分析确定哪个更快。
subrayWithRange:
方法可能会更快。您的意思是“i[myArray enumerateWithBlock: ^(id o, NSUInteger i, BOOL *f) { if (i < 10) return; if (i > 20) { *f = YES; return; } ... process objects in range ... }];