web-dev-qa-db-fra.com

Queue d'opération vs file d'attente de répartition pour l'application iOS

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

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

D'un autre côté, NSOperationQueue vous donne beaucoup plus de contrôle sur la façon dont vos opérations sont exécutées. Vous pouvez définir des dépendances entre des opérations individuelles par exemple, ce qui n'est pas possible avec des files d'attente GCD standard. Il est également possible d'annuler des opérations qui ont été mises en file d'attente dans un NSOperationQueue (dans la mesure où les opérations le prennent en charge). Lorsque vous mettez en file d'attente un bloc dans une file d'attente 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 avoir besoin d'être annulées ou qui ont des dépendances complexes. Les files d'attente de répartition GCD sont meilleures pour les tâches courtes qui devraient avoir des performances et une surcharge de mémoire minimales.

EDIT : Il semble que la documentation sur NSOperationQueue soit obsolète et utilisez GCD sur iOS 4.0 et versions ultérieures.

56
omz
  • Préférez GCD où la tâche n'est pas très complexe et des performances CPU optimales sont requises.
  • Préférez NSOperationQueue lorsque la tâche est complexe et nécessite l'annulation ou la suspension d'un bloc et la gestion des dépendances .

GCD est un moyen léger de représenter les unités de travail qui vont être exécutées simultanément. Vous ne planifiez pas ces unités de travail; le système s'occupe de la planification pour vous. Ajouter de la dépendance 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 peu de temps supplémentaire par rapport à GCD, mais vous pouvez ajouter une dépendance entre diverses opérations. Vous pouvez réutiliser les opérations, les annuler ou les suspendre. NSOperation est compatible avec l'observation des valeurs-clés (KVO); par exemple, vous pouvez faire démarrer NSOperation en écoutant NSNotificationCenter.

NSOperation et NSOperationQueue sont des API à levier plus élevé, fabriquées au-dessus du GDC lui-même, pour atteindre la concurrence d'une manière orientée objet.

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

21
Nitesh Borad