Блоки могут быть быстрее:
- Вы используете
NSEnumerationConcurrent
для перечисления массива.
- Когда вы найдете объект, который соответствует вашему условию, отправьте другой блок в последовательную очередь, которая добавляет объект в массив результатов. (Вы не можете сделать это одновременно, потому что NSMutableArrays не являются потокобезопасными.)
Однако в документации явно не сказано, что порядок будет сохраняться при одновременном перечислении. Я думаю, это хорошая ставка, что это не будет. Если порядок массива имеет значение, вам придется выполнить повторную сортировку (если это даже возможно) и включить ее в любое сравнение по времени.
Другими способами является одновременное перечисление с использованием блоков и фильтрация с использованием предикатов. filterUsingPredicate:
может быть быстрее, поскольку NSArray будет иметь возможность использовать внутренние знания для создания массива результатов быстрее, чем повторяющиеся сообщения addObject:
. Но это просто возможность; единственный способ узнать наверняка - это сравнить, и даже тогда ответ может измениться в любое время (в том числе в одном и том же процессе, для разных входных массивов или разных объектов в массиве).
Я бы посоветовал сразу реализовать это, используя предикаты, а затем использовать инструменты, чтобы определить, не является ли это проблемой производительности. Если нет, победит четкий код. Если это проблема производительности, попробуйте параллельное перечисление.