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.
Réponses
Trop de publicités?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.
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...
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é.