- Quali sono le differenze tra Coda di operazione e Coda di invio?
- In quali circostanze sarà più appropriato utilizzarli?
risposta
NSOperationQueue
precedente a Grand Central Dispatch e su iOS non utilizza GCD per eseguire operazioni (questo è diverso su Mac OS X). Usa i normali thread in background che hanno un po 'più di overhead rispetto alle code di invio GCD.
D'altra parte, NSOperationQueue
offre un maggiore controllo sul modo in cui vengono eseguite le operazioni. Ad esempio, puoi definire le dipendenze tra singole operazioni, il che non è possibile con le semplici code GCD. È anche possibile annullare le operazioni che sono state accodate in un NSOperationQueue
(a condizione che le operazioni lo supportino). Quando accodati a un blocco in una coda di invio GCD, verrà sicuramente eseguito a un certo punto.
Per riassumere, NSOperationQueue
può essere più adatto per operazioni di lunga durata che potrebbero dover essere annullate o avere dipendenze complesse. Le code di invio GCD sono migliori per le attività brevi che dovrebbero avere prestazioni minime e sovraccarico della memoria.
EDIT: Sembra che la documentazione relativa NSOperationQueue
è obsoleto ed è fa uso GCD su iOS 4.0 e versioni successive.
[NSOperationQueue su iOS 4.0 e versioni successive è basata su GCD.] (Https: // devforums.apple.com/message/352780#352780) –
- Preferisco GCD cui compito non è molto complessa e prestazioni ottimali della CPU è richiesto.
- Preferisci NSOperQueue dove l'attività è complessa e richiede annullamento o sospensione di un blocco e gestione delle dipendenze.
GCD è un modo leggero per rappresentare le unità di lavoro che verranno eseguite contemporaneamente. Non pianifichi queste unità di lavoro; il sistema si occupa della pianificazione per te. L'aggiunta di dipendenza tra i blocchi può essere un mal di testa. Annullare o sospendere un blocco crea lavoro extra per te come sviluppatore!
NSOperation e NSOperationQueue aggiungono un sovraccarico extra rispetto a GCD, ma è possibile aggiungere dipendenza tra varie operazioni. Puoi riutilizzare le operazioni, annullarle o sospenderle. NSOperation è compatibile con Key-Value Observation (KVO); ad esempio, è possibile avviare l'esecuzione di NSOper ascoltando NSNotificationCenter.
NSOperation e NSOperationQueue sono API a leva più elevate, create sulla stessa GDC, per ottenere la concorrenza in modo orientato agli oggetti.
- 1. Coda di invio coerente: arresto com.apple.root.default-qos.overcommit
- 2. Invio sincronizzazione sulla coda corrente
- 3. Come rimuovere il blocco in coda da una coda di invio GCD?
- 4. Invio di operazioni a una coda di messaggi per l'elaborazione quando possibile
- 5. Ricevi la coda di invio corrente?
- 6. Coda ordinaria contro coda SEDA
- 7. Eliminazione coda di coda in Mono
- 8. Salvare o serializzare la coda di operazioni di rete AF?
- 9. Controllare se sulla coda di invio corretta in Swift 3
- 10. La coda dei lavori e la coda pronta
- 11. coda python e coda multiprocessing: come si comportano?
- 12. Coda coda messaggi JS su Heroku
- 13. creare una coda di invio globale sequenziale personalizzato
- 14. Coda immutabile in Clojure
- 15. Coda concomitante con GCD? (IOS 4.2.1)
- 16. testa JavaScript e coda array senza mutazione
- 17. Coda FIFO seriale NSOperationQueue
- 18. Powershell - Log eventi di coda di coda? È possibile?
- 19. AngularJS $ q. coda di differita
- 20. Limiti di coda Amazon SQS
- 21. coda messaggi per iOS/iPad - qualcosa come MSMQ?
- 22. Pila e coda ordine enumerazione
- 23. Perché è dispatch_sync su deadlocking coda coda concorrente personalizzato
- 24. Sincronizzazione di una coda
- 25. Sicurezza thread per coda STL
- 26. coda di dimensioni limitate
- 27. Limite di coda WSMQ
- 28. troncatura coda uilabel
- 29. SDL_AddTimer e threading, coda timer di azzeramento
- 30. Progettazione e ridimensionamento della coda RabbitMQ
interrogazione http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe