293 votes

Objective-C déclarée @attributs property (nonatomic, copie, forte, faible)

Quelqu'un peut-il m'expliquer en détail quand je dois utiliser chaque attribut: nonatomic, copy, strong, weak, et ainsi de suite, pour une propriété déclarée, et d'expliquer ce que chacun fait? Une sorte d'exemple serait très bien aussi. Je suis à l'aide de l'ARC.

561voto

iDhaval Points 4221

Nonatomic

nonatomic est utilisé pour le multi threading fins. Si nous avons mis le nonatomic attribut au moment de la déclaration, puis un autre thread qui veulent avoir accès à cet objet peut accéder et donner des résultats dans le respect de multi-threading.

Copie

copy est requis lorsque l'objet est mutable. Utilisez cette option si vous avez besoin de la valeur de l'objet, c'est à ce moment, et vous ne voulez pas que la valeur pour refléter les modifications apportées par les autres propriétaires de l'objet. Vous aurez besoin de libérer l'objet lorsque vous avez terminé avec elle parce que vous faites de la rétention de la copie.

Attribuer

Assign est un peu l'inverse d' copy. Lors de l'appel de la lecture d'un assign de la propriété, il retourne une référence pour les données réelles. En général, vous utilisez cet attribut lorsque vous avez une propriété de type primitif (float, int, BOOL...)

Conserver

retain est requis lorsque l'attribut est un pointeur vers un objet. Le setter généré par @synthesize conservera (aka ajouter un conserver le comte de) l'objet. Vous aurez besoin de libérer l'objet lorsque vous avez terminé avec elle. En utilisant le conserver, il va augmenter la conserver comte et occupent mémoire dans autorelease pool.

Fort

strong est un remplacement pour le conserver attribut, dans le cadre de l'Objective-C Automatisé de Comptage de Référence (ARC). Hors-d'ARC code c'est juste un synonyme pour les conserver.

C'est un bon site pour en apprendre sur strong et weak pour iOS 5. http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

Faible

weak est similaire à l' strong sauf qu'il ne sera pas augmenter le nombre de références par 1. Il ne devient pas propriétaire de l'objet, mais seulement contient une référence à elle. Si la référence de l'objet compteur tombe à 0, même si vous pouvez toujours pointer vers ici, il sera libéré de la mémoire.

Le lien ci-dessus contiennent à la fois des informations précises concernant les Faibles et les Forts.

45voto

Ankit Srivastava Points 6979

nonatomic bien que l'objet n'est pas thread-safe qui signifie que si un autre thread tente d'accéder à cet objet que de mauvaises choses peuvent arriver, mais c'est beaucoup plus rapide que la propriété de l'atome.

strong est utilisé avec l'ARC et qu'il est fondamentalement vous permet , en n'ayant pas à se soucier de conserver le comte d'un objet. ARC libère automatiquement pour vous lorsque vous avez fini avec elle.En utilisant le mot-clé strong signifie que vous êtes propriétaire de l'objet.

weak propriété signifie que vous ne le possèdent pas et il garde la trace de l'objet jusqu'à l'objet qui lui a été assigné reste , dès que le deuxième objet est relâché, il perd de la valeur. Pour eg. obj.a=objectB; est utilisé et une faiblesse de la propriété , que sa valeur ne sera valable que jusqu'à objectB reste en mémoire.

copy de la propriété est très bien expliqué ici

strong,weak,retain,copy,assign sont mutuellement exclusives, que vous ne pouvez pas les utiliser sur un objet unique... lire la "Déclaré "Propriétés de la section

en espérant que cela vous aide un peu...

16voto

0x7fffffff Points 40133

Ce lien a le briser

http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property

attribuer implique __dangereuse_consignes de propriété.

copie implique __une forte appropriation, ainsi que le comportement habituel de copie la sémantique sur le setter.

conserver implique __une forte appropriation.

forte implique __une forte appropriation.

unsafe_unretained implique __dangereuse_consignes de propriété.

faible implique __la faiblesse de la propriété.

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