objective-c performance cocoa iterator fast-enumeration

objective c - ¿Por qué es NSFastEnumeration rápido?



objective-c performance (2)

Dependiendo del contenedor, NSFastEnumeration es al menos tan rápido como NSEnumerator pero generalmente mucho más rápido ya que implica menos llamadas a métodos.

En lugar de tener que llamar a nextObject para cada elemento de la matriz, con NSFastEnumerator la matriz puede devolver un bloque de objetos en una matriz C a la vez. Iterar esa matriz C es mucho más rápido que tener que hacer muchas llamadas a métodos, que cada uno busca y devuelve solo un objeto.

¿Alguien sabe si NSFastEnumeration es realmente más rápido (como en el rendimiento en tiempo de ejecución) que el uso de NSEnumerator o (para matrices) usando un contador de números enteros y recorriendo los elementos?

Si de hecho es más rápido, ¿cómo logra esa velocidad?

¿O quizás el "rápido" en realidad se refiere a escribir más rápido el código de iteración?

Gracias por adelantado.


Fast enumeration no es más rápida que cualquier ciclo "para". En un sentido general, eso es imposible porque los bucles básicos ya están tan optimizados como pueden.

En cambio, fast enumeration es más rápida que un ciclo "for" o "while" que obtiene datos de cada iteración de un objeto Objective-C utilizando una llamada a un método Objective-C.

Hace esto obteniendo los datos en lotes, reduciendo la sobrecarga de llamar a un método en cada iteración. La eliminación de la llamada al método desde la parte interna del bucle también tiene beneficios de optimización del compilador.