Après avoir lu tant d'articles Stackoverflow et d'applications de démonstration pour vérifier les attributs des propriétés des variables, j'ai décidé de rassembler toutes les informations sur les attributs :
- atomique //par défaut
- non-atomique
- strong=retain //default
- faible
- retenir
- attribuer //par défaut
- non sécurisé_non retenu
- copie
- en lecture seule
- lecture/écriture //par défaut
Vous trouverez ci-dessous le lien détaillé de l'article où vous pourrez trouver tous les attributs mentionnés ci-dessus, qui vous aideront certainement. Un grand merci à toutes les personnes qui donnent les meilleures réponses ici !
Attributs de propriétés variables ou Modificateurs dans iOS
1.strong (iOS4 = conserver)
- ça dit "garde ça dans le tas jusqu'à ce que je ne le pointe plus"
- en d'autres termes " je suis le propriétaire, vous ne pouvez pas désallouer ceci avant de viser bien avec ce même que retenir ".
- Vous n'utilisez le terme "fort" que si vous avez besoin de conserver l'objet.
- Par défaut, toutes les variables d'instance et les variables locales sont des pointeurs forts.
- Nous utilisons généralement strong pour les UIViewControllers (parents des éléments de l'interface utilisateur).
- strong est utilisé avec ARC et permet de ne pas avoir à se soucier du nombre de conservations d'un objet. ARC le libère automatiquement pour vous lorsque vous en avez fini avec lui. L'utilisation du mot-clé strong signifie que vous possédez l'objet.
Exemple :
@property (strong, nonatomic) ViewController *viewController;
@synthesize viewController;
2,faible -
- il est dit "gardez ceci tant que quelqu'un d'autre le pointe fortement".
- c'est la même chose que céder, pas conserver ou libérer
- Une référence "faible" est une référence que vous ne retenez pas.
- Nous utilisons généralement le terme "weak" pour les IBOutlets (enfants de UIViewController), car l'objet enfant ne doit exister que tant que l'objet parent existe.
- une référence faible est une référence qui ne protège pas l'objet référencé contre la collecte par un ramasseur de déchets.
- La faiblesse est essentiellement une affectation, une propriété non conservée. Sauf que lorsque l'objet est désalloué, le pointeur faible est automatiquement mis à nil.
Exemple :
@property (weak, nonatomic) IBOutlet UIButton *myButton;
@synthesize myButton;
Explication des points forts et des points faibles, Merci à BJ Homer :
Imaginez que notre objet est un chien, et que le chien veut s'enfuir (être désalloué).
Les pointeurs forts sont comme une laisse pour le chien. Tant que vous avez la laisse attachée au chien, celui-ci ne s'enfuira pas. Si cinq personnes attachent leur laisse à un chien, (cinq pointeurs forts à un objet), alors le chien ne s'enfuira pas tant que les cinq laisses ne seront pas détachées.
Les pointeurs faibles, d'un autre côté, sont comme des petits enfants pointant vers le chien en disant "Regardez ! Un chien !" Tant que le chien est toujours sur la laisse, les enfants peuvent toujours voir le chien, et ils vont toujours le pointer vers lui. Mais dès que toutes les laisses sont détachées, le chien s'enfuit. peu importe le nombre d'enfants qui le montrent du doigt.
Dès que le dernier pointeur fort (laisse) ne pointe plus vers un l'objet sera désalloué, et tous les pointeurs faibles seront mis à zéro.
Quand on utilise le mot "faible" ?
La seule fois où vous voudriez utiliser le mot "faible", c'est si vous vouliez éviter les cycles de retenue. (par exemple, le parent retient l'enfant et l'enfant retient le parent, de sorte qu'aucun n'est jamais libéré).
3.retenir = fort
- il est retenu, l'ancienne valeur est libérée et il est assigné retenir spécifie que la nouvelle valeur doit être envoyée
- conserver l'affectation et envoyer l'ancienne valeur -libérer
- retenir, c'est la même chose qu'être fort.
- apple dit que si vous écrivez retain il sera auto converti/travaillera comme strong only.
- les méthodes comme "alloc" incluent un "retain" implicite
Exemple :
@property (nonatomic, retain) NSString *name;
@synthesize name;
4.assignation
- assign est la valeur par défaut et effectue simplement une affectation de variable.
- assign est un attribut de propriété qui indique au compilateur comment synthétiser l'implémentation du setter de la propriété.
- J'utiliserais assign pour les propriétés primitives du C et weak pour les références faibles aux objets Objective-C.
Exemple :
@property (nonatomic, assign) NSString *address;
@synthesize address;
12 votes
Il y a trois nouveaux attributs de gestion de la mémoire pour les propriétés introduits par ARC
strong
,weak
yunsafe_unretained
.5 votes
@NJones Il y a deux attributs de propriété (
weak
ystrong
) et 4 qualificatifs de durée de vie variable (__strong
,__weak
,__unsafe_unretained
,__autoreleasing
). Voir les notes de l'ARC ci-dessous.1 votes
@SnowCrash Il existait une version de Xcode, probablement un aperçu pour développeur, dans laquelle l'utilisation de
assign
lors de la compilation avec ARC était une erreur. Il y a beaucoup de réponses supprimées à ce sujet. Il semble que cela ait été modifié avant la version finale.unsafe_unretained
est l'attribut préféré de bon nombre d'entre nous, les adopteurs précoces. Pour preuve queunsafe_unretained
est un attribut valide, consultez le document "Programming With Objective-C" d'Apple, dans la section "Encapsulating Data", sous le titre "Use Unsafe Unretained References for Some Classes". Il est écrit : "Pour une propriété, cela signifie utiliser l'attribut unsafe_unretained :"