Сомнительно, что использование целочисленного счетчика в цикле for
вызовет проблемы со скоростью. Более вероятно будет медленнее пытаться найти индекс заданного объекта из перечислителя, чем просто вести запись индекса самостоятельно. Если вы хотите обойти повторную отправку сообщений, взгляните на метод NSArray getObjects:range:
.
size_t count = [myArray count];
id *objects = calloc(count, sizeof(id));
[myArray getObjects:objects range:NSMakeRange(0, count)];
// if you have a very large count, you'll save doing an
// "objectAtIndex:" for each item.
for (int i = 0; i < count; i++)
[objects[i] doSomething];
free(objects);
Вероятно, вы увидите только минимальную разницу в производительности для невероятно больших массивов, но не стоит недооценивать оптимизацию под капотом. Даже документация для getObjects:range:
не рекомендует использовать эту технику для этой цели.
NSArray indexOfObject:
будет перебирать все элементы, пока один не вернет YES
из сообщения isEqual:
(что может включать в себя дальнейшую отправку сообщения).