2011-08-16 21 views
33
  1. ¿Cuáles son las diferencias entre Operation Queue y Dispatch Queue?
  2. ¿Bajo qué circunstancias será más apropiado usar cada una?
+0

pregunta similares http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe

Respuesta

42

NSOperationQueue anterior a Grand Central Dispatch y en iOS no utiliza GCD para ejecutar operaciones (esto es diferente en Mac OS X). Utiliza subprocesos de fondo regulares que tienen un poco más de sobrecarga que las colas de despacho de GCD.

Por otro lado, NSOperationQueue le da mucho más control sobre cómo se ejecutan sus operaciones. Por ejemplo, puede definir dependencias entre operaciones individuales, lo que no es posible con colas GCD simples. También es posible cancelar operaciones que se han puesto en cola en un NSOperationQueue (en la medida en que las operaciones lo admitan). Cuando encola un bloque en una cola de despacho de GCD, definitivamente se ejecutará en algún punto.

Para resumir, NSOperationQueue puede ser más adecuado para operaciones de larga ejecución que pueden necesitar ser canceladas o tener dependencias complejas. Las colas de despacho de GCD son mejores para tareas cortas que deberían tener un rendimiento mínimo y una sobrecarga de memoria.

EDITAR: Parece que la documentación acerca de NSOperationQueue es obsoleta y se hace uso GCD en iOS 4.0 y posterior.

+9

[NSOperationQueue en iOS 4.0 y posterior se basa en GCD.] (Https: // devforums.apple.com/message/352780#352780) –

10
  • Prefiero GCD donde tarea no es mucho más complejo y un rendimiento óptimo de la CPU se requiere.
  • Prefiere NSOperationQueue donde la tarea es compleja y requiere cancelar o suspender un bloque y administración de la dependencia.

GCD es una forma ligera de representar unidades de trabajo que se ejecutarán al mismo tiempo. Usted no programa estas unidades de trabajo; el sistema se encarga de la programación para usted. Agregar dependencia entre bloques puede ser un dolor de cabeza. ¡Cancelar o suspender un bloque crea trabajo adicional para usted como desarrollador!

NSOperation y NSOperationQueue agregan un poco de sobrecarga adicional en comparación con GCD, pero puede agregar dependencia entre varias operaciones. Puede reutilizar operaciones, cancelarlas o suspenderlas. NSOperation es compatible con Key-Value Observation (KVO); por ejemplo, puede hacer que un inicio de NSOperation escuche NSNotificationCenter.

NSOperation y NSOperationQueue son API de palanca superior, creadas sobre el propio GDC, para lograr la concurrencia de forma orientada a objetos.

For detailed explanation, refer this question: https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch

Cuestiones relacionadas