hay una manera de que los bloques podrían ser más rápido:
- Se utilizan
NSEnumerationConcurrent
para enumerar la matriz.
- Cuando encuentre un objeto que coincida con su condición, envíe otro bloque a una cola serie que agregue el objeto a la matriz de resultados. (No puede hacer esto simultáneamente porque NSMutableArrays no es seguro para subprocesos.)
Sin embargo, la documentación no indica explícitamente que se conservará el orden al enumerar concurrentemente. Creo que es una buena apuesta que no sea así. Si el orden de la matriz importa, tendrías que volver a ordenar (si eso es posible), y tendrías que incluir eso en cualquier comparación de tiempo.
Las otras formas son enumerar no concurrentemente usando bloques y filtrar usando predicados. filterUsingPredicate:
podría ser más rápido, ya que NSArray tendrá la oportunidad de usar el conocimiento interno para construir la matriz de resultados más rápido que los mensajes addObject:
repetidos. Pero eso es solo una posibilidad; la única forma de saberlo con certeza sería comparar, e incluso entonces, la respuesta podría cambiar en cualquier momento (incluso en el mismo proceso, para diferentes matrices de entrada u objetos diferentes en la matriz).
Mi consejo sería implementarlo directamente -usando predicados- al principio, y luego usar los instrumentos para ver si se trata de un problema de rendimiento. Si no, el código claro gana. Si se trata de un problema de rendimiento, intente la enumeración concurrente.
Gracias, estás escribiendo ... y menos código para mantener = menos dolor :) – jibay