11

In quali casi preferiresti utilizzare NSOperationQueue su GCD?NSOperationQueue vs GCD

Dalla mia esperienza limitata di questi due, prendo il fatto che con NSOperationQueue hai praticamente il controllo su quante operazioni simultanee ci sono.

Con GCD non è possibile farlo poiché si utilizza una coda. Tranne che puoi in qualche modo simulare questo con un processore multi core, anche se penso ancora che non ci sia modo di controllarlo.

+4

Possibile duplicato di http://stackoverflow.com/questions/7146052/gcd-nsoperationqueue-or-create-a-thread-manually http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central -dispatch – 0x8badf00d

+0

possibile duplicato di [NSOperation vs Grand Central Dispatch] (http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch) – Monolo

risposta

19

NSOperationQueue è costruito su GCD a partire da iOS 4. Utilizzare l'API più semplice per l'attività in corso. Misurare se si tratta di un problema di prestazioni e quindi rivalutare se necessario. dispatch_async è di livello inferiore, di solito rouso di tipo C (ma non limitato a), ed è valido per le offerte di tipo one-shot e sequenziale. NSOperationQueues sono di livello superiore, oggetti Objective-C, e sono utili se si aggiungono molte operazioni in vari punti del codice e/o si ha bisogno di gestire simultaneità, priorità e dipendenze.

+0

è NSOperationQueue aa più alta API di GCD? – xonegirlz

+1

NSOperation è basato su GCD. Una NSOperation è ingombrante e necessita di più codici della piastra di riscaldamento per configurarla, ma ha molte più funzionalità. È possibile creare la stessa sottoclasse NSOperation in varie parti del codice e inserirle nella coda ed eseguirla. –

7

Presumo per NSPriorityQueue che si intende NSOperazioneQueue? Le principali ragioni per usare NSOperationQueue oltre GCD sono se è necessario le sue caratteristiche aggiuntive:

  • più vecchio OS supporto
  • KVO sulle proprietà operative
  • Dipendenze
  • coda larghezza di limitazione (anche se è possibile farlo abbastanza facilmente in GCD con dispatch_semaphore_t)

in caso contrario, a meno che non si sta lavorando con un'API che richiede un NSOperationQueue, GCD è probabilmente una scommessa migliore

0

Essendo al livello più alto, ho trovato NSOperationQueue più elegante per gestire attività/operazioni invece di gestirle a livello inferiore utilizzando GCD.

+0

Puoi aggiungere ulteriori dettagli sul motivo per cui hai trovato NSOperationQueue più elegante? Senza di ciò, la tua risposta non è utile. – cmaster