File d'attente d'opération vs file d'attente D'expédition pour l'application iOS
- quelles sont les différences entre la file D'attente pour L'opération et la file d'attente pour le départ?
- dans quelles circonstances serait-il plus approprié de les utiliser?
2 réponses
NSOperationQueue
est antérieur à Grand Central Dispatch et sur iOS il n'utilise pas GCD pour exécuter des 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 lignes aériennes que les files D'attente de répartition 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 définir des dépendances entre des opérations individuelles par exemple, ce qui n'est pas possible avec des files D'attente GCD simples. Il est également possibilité d'annuler des opérations qui ont été demandées dans un NSOperationQueue
(dans la mesure où les opérations le supportent). Lorsque vous consultez un bloc dans une file D'attente D'expédition GCD, il sera certainement exécuté à un moment donné.
pour résumer, NSOperationQueue
peut être plus approprié pour les opérations de longue durée qui peuvent avoir besoin d'être annulée ou 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 minimales et la mémoire aérienne.
EDIT : il semble que la documentation sur NSOperationQueue
est périmée et il ne utiliser GCD sur iOS 4.0 et plus tard.
- préfèrent GCD lorsque la tâche n'est pas très complexe et performance CPU optimale est nécessaire.
- Préfèrent NSOperationQueue où la tâche est complexe et nécessite de l'annulation ou la suspension d'un bloc et de gestion de la dépendance .
PGCD est un moyen léger pour représenter les unités de travail qui vont être exécutées simultanément. Vous ne programmez pas ces unités de travail; le système prend soin de la planification pour vous. Ajouter de la dépendance parmi les blocs peut être un casse-tête. Annuler ou suspendre un bloc crée du travail supplémentaire pour vous en tant que développeur!
Nsopération et NSOperationQueue ajouter un peu plus de frais généraux par rapport à GCD, mais vous pouvez ajouter la dépendance parmi diverses opérations. Vous pouvez réutiliser des opérations, les annuler ou les suspendre. NSOperation est compatible avec Key-Value Observation (KVO); par exemple, vous pouvez faire démarrer NSOperation en écoutant à la Nnotificationcenter.
NSOperation et NSOperationQueue sont des APIs à levier plus élevés, fabriqués sur le GDC lui-même, pour atteindre la simultanéité d'une manière orientée objet.