Que signifie "non atomique" dans ce code ?
@property(nonatomic, retain) UITextField *theUsersName;
Quelle est la différence entre atomique et non atomique ?
Merci
Que signifie "non atomique" dans ce code ?
@property(nonatomic, retain) UITextField *theUsersName;
Quelle est la différence entre atomique et non atomique ?
Merci
Jetez un coup d'œil à la Apple Docs .
En gros, si vous dites nonatomic
et vous générez les accesseurs en utilisant @synthesize
si plusieurs fils de discussion essaient de modifier/lire la propriété en même temps, des problèmes peuvent survenir. Vous pouvez obtenir des valeurs partiellement écrites ou des objets trop libérés/rétenus, ce qui peut facilement conduire à des plantages. (C'est potentiellement beaucoup plus rapide qu'un accesseur atomique, cependant).
Si vous utilisez la valeur par défaut (qui est atomic
Avant, il n'y avait pas de mot-clé pour ça, mais maintenant est maintenant ), alors le @synthesize
d utilisent un verrou au niveau de l'objet pour garantir que les lectures/écritures multiples d'une propriété sont sérialisées. Comme le souligne la documentation d'Apple, cela ne veut pas dire que l'objet entier est thread-safe. mais les propriétés lues/écrites le sont.
Bien sûr, si vous mettez en œuvre vos propres accesseurs plutôt que d'utiliser @synthesize
Je pense que ces déclarations ne font rien d'autre qu'exprimer votre intention de savoir si la propriété est implémentée de manière threadsafe.
Après avoir lu un grand nombre d'articles, de messages sur les SO et réalisé des applications de démonstration pour vérifier les attributs des propriétés variables, j'ai décidé de rassembler toutes les informations sur les attributs.
Vous trouverez ci-dessous le lien de l'article détaillé où vous pourrez trouver tous les attributs mentionnés ci-dessus, qui vous aideront certainement. Merci à toutes les personnes qui ont donné les meilleures réponses ici !
Exemple :
@property (retain) NSString *name;
@synthesize name;
Exemple :
@property (nonatomic, retain) NSString *name;
@synthesize name;
En plus de ce qui a déjà été dit à propos du threadsafeness, les propriétés non-atomiques sont plus rapides que les accesseurs atomiques. Ce n'est pas quelque chose dont vous devez habituellement vous soucier, mais gardez-le à l'esprit. Les propriétés générées par Core Data sont non atomiques en partie pour cette raison.
Dans un programme multithread, une opération atomique ne peut pas être interrompue partiellement, alors que les opérations non atomiques le peuvent.
Par conséquent, vous devriez utiliser les mutex (ou quelque chose de ce genre) si vous avez une opération critique non atomique que vous ne voulez pas voir interrompue.
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.