2011-08-16 18 views
33
  1. Quali sono le differenze tra Coda di operazione e Coda di invio?
  2. In quali circostanze sarà più appropriato utilizzarli?
+0

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

risposta

42

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.

+9

[NSOperationQueue su iOS 4.0 e versioni successive è basata su GCD.] (Https: // devforums.apple.com/message/352780#352780) –

10
  • 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.

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