Быстрое перечисление?

#iphone #objective-c

#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:

В вашем конкретном случае, вероятно, лучший способ — сохранить индексы объектов, которые вам не нужны, в an 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];
  

Комментарии:

1. Спасибо! Это было то, что я искал!