Вы можете выполнять итерацию массива в обратном порядке, поэтому вам не нужно дополнительно настраивать индекс:
for( int i = [array count]-1; i >=0; --i)
{
if( condition )
{
[array removeItemAtIndex : i];
}
}
Или накапливать индексы для удаления в наборе индексов при перечислении, а затем удалять все элементы сразу:
NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init];
for( int i = 0, i < [array count]; i ++ )
{
if( condition )
{
[indexes addIndex : i];
}
}
[array removeObjectsAtIndexes:indexes];
[indexes release];
Я бы выбрал 2-й вариант, потому что изменение массива при перечислении может быть не очень хорошим стилем (хотя в данном конкретном случае это не даст вам ошибок)