J'utilise NSInvocationOperation
avec NSOperationQueue
développer dans iOS5. Selon la documentation d'Apple sur objets d'invocation :
La classe NSInvocationOperation est une con NSOperation... Cette classe implémente une non courant opération.
Ok, donc mon NSInvocationOperation
(corrigez-moi ici) La documentation d'Apple indique également que les objets de la file d'attente d'opérations sont synchronisés :
Dans iOS, les files d'attente d'opérations n'utilisent pas Grand Central Dispatch pour exécuter les opérations suivantes opérations. Elles créent des threads distincts pour les opérations non simultanées et lancent les opérations simultanées à partir du fil d'exécution actuel.
J'utilise le NSInvocationObject
qui est un objet non simultané, et l'ajouter à la file d'attente des opérations de la manière suivante :
[operationQueue addOperation:operation];
Ma question est donc la suivante : 1) Puisque la file d'attente des opérations va générer un thread séparé pour exécuter le NSInvocationObject comme indiqué dans la documentation, cela sera-t-il exécuté de manière asynchrone plutôt que synchrone ?
[Mise à jour - en réponse à la réponse de Dani ci-dessous. Tiré d'un Lien Apple .
NSOperation et NSOperationQueue
Vous pouvez utiliser NSOperation de différentes manières, mais la plus courante est d'écrire une sous-classe personnalisée et de surcharger une méthode : main. La méthode main est appelée pour effectuer l'opération lorsque la file d'attente de NSOperationQueue planifie son exécution. Les classes NSOperation écrites de cette de cette manière sont connues comme des opérations non simultanées, parce que le développeur n'est pas responsable de la création de threads - le multithreading est entièrement géré par la super classe. (Ne vous laissez pas déconcerter par la terminologie : il s'agit simplement de qu'une opération est non simultanée ne signifie pas qu'elle ne peut pas être qu'elle ne peut pas être exécutée simultanément, cela signifie simplement que vous n'avez pas à gérer la concurrence vous-même. la concurrence vous-même).
Si vous avez besoin d'un plus grand contrôle sur le threading et l'environnement d'exécution de votre système d'exploitation, vous pouvez utiliser le logiciel de gestion de projet. de vos opérations, vous pouvez utiliser des opérations concurrentes. Pour ce faire Pour ce faire, vous devez sous-classer NSOperation et surcharger la méthode start. Dans la méthode méthode start, vous pouvez créer des threads et configurer l'environnement avant d'appeler la méthode main. avant d'appeler la méthode principale. Vous devez également maintenir l'état de la NSOperation en définissant des propriétés telles que isExecuting et isFinished. En résumé, les opérations concurrentes vous donnent beaucoup plus de contrôle, mais demandent également plus d'efforts - pour la plupart des tâches, les opérations suffisent.