#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. Спасибо! Это было то, что я искал!