El punto que se hace aquí es el mismo que Chris Hanson afirma en su artículo "When to use NSOperation vs. GCD":
La respuesta sencilla es una guía general para todas las aplicaciones desarrollo:
Utilice siempre el la abstracción de más alto nivel disponible para usted, y deje caer hasta las abstracciones de nivel inferior cuando la medición muestre que son necesarios.
En este caso particular, significa que cuando se escriben aplicaciones Cocoa , generalmente debe usar NSOperation en lugar de usando GCD directamente. No debido a una diferencia en la eficiencia, pero porque NSOperation proporciona una abstracción de nivel superior encima de los mecanismos de GCD.
En general, estoy de acuerdo con esto.NSOperation y NSOperationQueue brindan soporte para dependencias y uno o dos aspectos más que los bloques y colas de GCD no tienen, y abstraen los detalles de nivel inferior de cómo se implementan las operaciones simultáneas. Si necesita esa funcionalidad, NSOperation es una muy buena forma de hacerlo.
Sin embargo, después de trabajar con ambos, me he encontrado reemplazando todo mi código basado en NSOpection con bloques GCD y colas. He hecho esto por dos razones: hay una sobrecarga significativa al usar NSOperation para acciones frecuentes, y creo que mi código es más limpio y más descriptivo cuando uso bloques GCD. El primer motivo proviene de la creación de perfiles en mis aplicaciones, donde descubrí que el proceso de asignación y desasignación de objetos NSOperation requería una cantidad significativa de recursos de CPU cuando se trata de acciones pequeñas y frecuentes, como renderizar un marco de OpenGL ES en la pantalla. Los bloques GCD eliminaron por completo esa sobrecarga, lo que permitió mejoras significativas en el rendimiento.
La segunda razón es más subjetiva, pero creo que mi código es más limpio cuando se usan bloques que NSOperations. La captura rápida del alcance permitido por un bloque y la naturaleza en línea de ellos hacen que haya menos código, porque no es necesario crear subclases NSOperation personalizadas o paquetes de parámetros para pasar a la operación, y un código más descriptivo en mi opinión, porque puede colocar el código para que se ejecute en una cola en el punto donde se dispara.
Una vez más, es una cuestión de preferencia, pero he descubierto que estoy usando GCD más, incluso en aplicaciones de Cocoa abstractas.
https: // cocoacasts.com/choosing-between-nsoperation-and-grand-central-dispatch/ – Masih