- ¿Cuáles son las diferencias entre Operation Queue y Dispatch Queue?
- ¿Bajo qué circunstancias será más apropiado usar cada una?
Respuesta
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.
[NSOperationQueue en iOS 4.0 y posterior se basa en GCD.] (Https: // devforums.apple.com/message/352780#352780) –
- 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.
- 1. pila frente a la cola?
- 2. envío de correo rápido a la cola para entrega posterior
- 3. ¿La suspensión de una cola de envío suspende su cola de destino?
- 4. Recursividad de cola frente a recursión hacia adelante en Erlang
- 5. Lista frente a cola vs Conjunto de colecciones en Java
- 6. ¿Cuál es la mejor práctica de crear cola de tareas persistentes en la aplicación iOS?
- 7. cola de mensajes para iOS/iPad, algo así como MSMQ?
- 8. Ordenando una cola usando la misma cola
- 9. ¿array_walk_recursive utiliza la optimización de la cola de cola?
- 10. Administrador de ubicación se creó en una cola de envío
- 11. Mover el mensaje de la cola de la carta muerta a la cola de salida MSMQ
- 12. truncamiento de cola uilabel
- 13. Lista Haskell concatenación frente (cabeza: la cola) Formato
- 14. Iterar a través de la cola estándar
- 15. NServiceBus suscríbase a la cola de errores
- 16. ¿Inspeccionar los bloques GCD en cola?
- 17. Cola concurrente con GCD? (IOS 4.2.1)
- 18. Longitud máxima para la cola de scala
- 19. Python 2.6 Objeto de envío conexión a través de la cola/Tubería/etc
- 20. ASP.NET: el mejor sistema de cola para una nueva aplicación
- 21. Cola azul: busque si el artículo está en la cola
- 22. La cola JMS está llena
- 23. cola de python y cola de multiprocesamiento: ¿cómo se comportan?
- 24. Python para emular la cola remota -f?
- 25. Cola de comandos
- 26. Sincronización de una cola
- 27. perl cola de proceso
- 28. lista enlazada añadir a la cola, confusión
- 29. Referencia no definida a la cola estática
- 30. cola de llamadas AJAX
pregunta similares http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe