Opération File d'attente vs Dispatch Queue pour iOS Application

  1. Quelles sont les différences entre Operation Queue et Dispatch Queue?
  2. Dans quelles circonstances sera-t-il plus approprié d'utiliser chacun?

NSOperationQueue est antérieur à Grand Central Dispatch et sur iOS il n'utilise pas GCD pour exécuter des opérations (ceci est différent sur Mac OS X). Il utilise des threads d'arrière-plan réguliers qui ont un peu plus de frais généraux que les files d'attente d'envoi GCD.

D'autre part, NSOperationQueue vous donne beaucoup plus de contrôle sur la façon dont vos opérations sont exécutées. Vous pouvez par exemple définir des dependencies entre des opérations individuelles, ce qui n'est pas possible avec les files d'attente GCD. Il est également possible d'annuler les opérations qui ont été mises en queue dans un NSOperationQueue (dans la mesure où les opérations le supportent). Lorsque vous mettez en queue un bloc dans une queue de répartition GCD, il sera définitivement exécuté à un moment donné.

Pour résumer, NSOperationQueue peut être plus adapté aux opérations de longue durée qui peuvent nécessiter une annulation ou des dependencies complexes. Les files d'attente de répartition GCD sont préférables pour les tâches courtes qui doivent avoir un minimum de performances et de memory.

EDIT : Il semble que la documentation sur NSOperationQueue est obsolète et utilise GCD sous iOS 4.0 et NSOperationQueue ultérieures.

  • Préférez GCD où la tâche n'est pas très complexe et une performance CPU optimale est requirejse.
  • Préférez NSOperationQueue où la tâche est complexe et nécessite l' annulation ou la suspension d'une gestion de bloc et de dependencies .

GCD est un moyen léger de représenter des unités de travail qui vont être exécutées simultanément. Vous ne planifiez pas ces unités de travail; le système prend soin de la planification pour vous. L'ajout de dependencies entre les blocs peut être un casse-tête. L'annulation ou la suspension d'un bloc crée un travail supplémentaire pour vous en tant que développeur!

NSOperation et NSOperationQueue ajoutent un léger surcoût par rapport à GCD, mais vous pouvez append une dépendance entre différentes opérations. Vous pouvez réutiliser les opérations, les annuler ou les suspendre. NSOperation est compatible avec Key-Value Observation (KVO); Par exemple, vous pouvez démarrer NSOperation en écoutant NSNotificationCenter.

Pour une explication détaillée, référez-vous à cette question: https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch