快速列举?

时间:2011-10-11 21:08:15

标签: iphone objective-c

我目前正在开发一款游戏,需要快速枚举数组。我需要每秒运行30次代码,现在想问一下完成任务的最佳方法是什么。 我想枚举一个数组并同时修改它。

我现在知道2:

NSMutableArray*array;

int i=0;

int x=0;
 for (myclass*spr in [[array copy] autorelease]) {
    if ([spr isInBounds]) {
        //do something
    } else {
        [array removeObjectAtIndex:x];
        x--;
    }

    x++;
}

int x=0;

while(x<[array count])
{
    if(![(myclass*)spr isInBounds]) {
        [array removeObjectAtIndex:x];
        x--;
    }
    x++;
}

最快的方法是什么?你知道其他方法吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:6)

在您的特定情况下,最好的方法可能是在NSIndexSet中保存您不关心的对象的索引,并在循环后使用它们一次删除所有对象。

NSMutableIndexSet *is = [NSMutableIndexSet indexSet];
[array enumerateObjectsUsingBlock:^(myclass *spr, NSUInteger idx, BOOL *stop) {
    if ([spr isInBounds]) {
        // do something
    } else {
        [is addIndex:idx];
    }
}];
[array removeObjectsAtIndexes:is];