28 votes

Quelles tâches conviennent mieux à NSOperation qu'à GCD?

Quelles tâches seraient mieux adaptées à l'utilisation de NSOperation plutôt que d'utiliser GCD lors de la programmation pour l'iPhone?

Pour moi, ils semblent faire la même chose. Je ne vois pas les forces et les faiblesses de l'une par rapport à l'autre.

24voto

Yuji Points 26887

NSOperation est construit sur le haut de GCD, donc, la question est plus de savoir si vous utilisez NSOperation ou de passer un bloc directement de PGCD.

Un NSOperation est volumineux et a besoin de plus de chaudière-plaque de codes pour le configurer, mais il a beaucoup plus de fonctionnalités. Vous pouvez créer le même NSOperation sous-classe dans les différentes parties de votre code et de les mettre dans la file d'attente et l'exécuter.

Le passage d'un bloc à un PGCD, par exemple en dispatch_async est rapide et jetable. Généralement, vous n'avez pas réutiliser un bloc de n'importe où ailleurs; vous venez de configurer un bloc qui est exécutée qu'à ce point du code, il transmet le PGCD ou d'autres Api, et rapidement aller sur.

Ainsi, chacun a ses mérites.

12voto

scaba Points 406

Apparemment, NSOperationQueue est construit sur le PGCD de iOS 4; les docs n'ont tout simplement pas été mis à jour. Cochez cette publication par un employé d'Apple ici: https://devforums.apple.com/message/352770 (Vous devrez peut-être créer un compte), vous devez suivre Mike Abdullah conseils et de l'utilisation la plus simple de l'API pour la tâche à portée de main. dispatch_async est de niveau inférieur, généralement C-type de matos (mais pas uniquement), et il est bon one-shot et séquentielle offres de type (feu ce bloc sur cette file d'attente, FTW). NSOperationQueues sont de niveau supérieur, Objective-C des trucs, et sont bonnes si vous ajoutez beaucoup d'opérations à différents points dans votre code, et/ou le besoin de gérer la simultanéité, les priorités et les dépendances. Au moins c'est comment je les utilise.

8voto

Mike Abdullah Points 9464

Comme toujours avec de telles questions, utilisez l'API la plus simple disponible. Mesurez s'il s'agit d'un problème de performances, puis réévaluez-le si nécessaire.

3voto

Stuart Points 8578

Une chose que je ne crois pas avoir été mentionnée ici est que NSOperation s peuvent être annulés pendant l'exécution, alors qu'un bloc est garanti de se terminer une fois l'exécution commencée. Cela dit, une file d'attente GCD peut être suspendue ( dispatch_suspend() ), de sorte que tous les blocs suivant les blocs en cours d'exécution ne seront pas exécutés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X