2009-05-08 5 views
1

Je suis toujours en train de travailler dans un environnement fileté en utilisant NSOperation, et j'aimerais savoir si l'utilisation de la propriété nonatomic vaut même la peine si vous sous-classes NSOperation?propriété non atomique dans un objet NSOperation (environnement thread), quand l'utiliser?

Si votre defaultQueue est défini sur 1, le surcoût supplémentaire de nonatomic en vaut-il la peine? Cela peut-il être nécessaire si vous exécutez plus d'un thread par file d'attente d'opération?

Merci de fournir une solution pour mieux comprendre cette propriété dans un environnement fileté.

Répondre

4

Si vous avez un objet (ou une propriété de cet objet) que vous pouvez garantir qu'il n'est pas accessible à partir de plusieurs threads en même temps, vous pouvez éviter l'accès atomique à cette propriété en utilisant nonatomic. Dans le cas le plus simple de création d'une opération et de mise en file d'attente sur une NSOperationQueue, chaque instance de NSOperation sera configurée dans le thread appelant ou exécutée dans un seul thread d'arrière-plan; donc à tout moment, un seul thread devrait y avoir accès.

La question plus générale de savoir quand nonatomic est utile dépend en partie de savoir si vous utilisez la récupération de place activée. Selon les notes de publication d'Objective-C:

L'accès aux propriétés est atomique par défaut. Ceci est trivial sous GC pour presque tout et aussi trivial sous non-GC pour tout sauf les objets et les structures. En particulier, l'accès atomique aux objets retenus dans des conditions non GC peut être coûteux. En tant que tel, un attribut de propriété nonatomic est disponible.

Questions connexes