96 votes

Attributs d’accesseur Set de propriété faibles et forts en Objective-C

Quelle est la différence entre les attributs accesseur Set de propriété faibles et forts en Objective-C ?

Ce qui est les répercussions et les avantages ?

J’ai entendu dire que la faiblesse n’est pas disponible sur l’iOS 4 et nous devons utiliser les ayant-droit.

Est faible similaire à assigner ?

124voto

RDC Points 9222

Ici l'information est-ce que je sais sur les propriétés des variables

  1. atomique //par défaut
  2. nonatomic
  3. fort=conserver //par défaut
  4. faible
  5. conserver
  6. attribuer //par défaut
  7. unsafe_unretained
  8. copie
  9. readonly
  10. readwrite //par défaut

donc, ci-dessous est détaillé lien de l'article où vous pouvez trouver ci-dessus mentionné, tous les attributs, qui a très envie de vous aider. Un grand merci à toutes les personnes qui donnent de meilleures réponses ici!!

Variable de la propriété des attributs ou des Modificateurs dans iOS

01.forte (iOS4 = conserver ) - il dit: "gardez cela dans le tas jusqu'à ce que je n'ai pas de point de plus". - en d'autres termes, "je suis le propriétaire, vous ne pouvez pas dealloc ce avant de viser correctement avec la même retenir" - Vous utiliser seulement si vous avez besoin de conserver l'objet. - Par défaut, toutes les variables d'instance et les variables locales sont fortes présomptions. - Nous utilisons généralement forte pour UIViewControllers (INTERFACE utilisateur de l'élément de parents) - forte 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é forte signifie que vous êtes propriétaire de l'objet.

Exemple:

@property (strong, nonatomic) ViewController *viewController;

@synthesize viewController;

02.faible (iOS4 = unsafe_unretained ) - il est dit que "garder cette aussi longtemps que quelqu'un d'autre points à elle fortement" - la même chose que de céder, pas de conserver ou de libération - Un "faible" de référence est une référence que vous n'avez pas conservé. - Nous utilisons généralement faible pour IBOutlets (UIViewController de l'Enfant).Cela fonctionne parce que l'enfant objet uniquement doit exister aussi longtemps que l'objet parent. - une faiblesse de référence est une référence qui ne protège pas l'objet référencé à partir de la collecte par un garbage collector. - Faible est essentiellement attribuer, consignes de propriété. Sauf lorsque l'objet est libéré de la faiblesse de pointeur est automatiquement mis à zéro

Exemple :

@property (weak, nonatomic) IBOutlet UIButton *myButton;

@synthesize myButton;

Expliquer:Grâce à BJ Homer

Imaginez notre objet est un chien et que le chien a envie de fuir (être libéré). De fortes présomptions sont comme une laisse sur le chien. Tant que vous avez la laisse attachée au chien, le chien ne s'en ira pas. Si cinq personnes de joindre leur laisse d'un chien, (cinq de fortes présomptions pour qu'un seul objet), puis le chien ne s'en ira pas jusqu'à ce que tous les cinq laisses sont détachés. Des pointeurs faibles, d'autre part, sont comme de petits enfants, pointant vers le chien et dire "Regardez! Un chien!" Tant que le chien est encore sur la laisse, les petits enfants peuvent encore voir le chien, et ils vont encore point. Dès que tous les laisses sont détachés, cependant, le chien s'enfuit de la maison, peu importe combien de petits enfants qui sont pointant vers elle. Dès que le dernier fort pointeur (laisse) ne pointe plus vers un objet, l'objet sera libéré, et tous des pointeurs faibles seront remis à zéro. Lorsque nous utilisons des faibles? Le seul moment où vous souhaitez utiliser la faiblesse, c'est que si vous voulais éviter de conserver des cycles (par exemple, le parent conserve l'enfant et l'enfant conserve son parent, n'est jamais sorti).

103voto

Robert Points 10822

Soit vous avez de l'ARC sur on ou off pour un fichier particulier. Si elle est sur vous ne pouvez pas utiliser retain release autorelease etc... au Lieu de cela, vous utilisez strong weak pour les propriétés ou __strong __weak pour les variables (valeur par défaut: __strong). Forte est l'équivalent de conserver, cependant ARC gérer la sortie pour vous.

Le seul moment où vous souhaitez utiliser la faiblesse, c'est que si vous voulais éviter de conserver des cycles (par exemple, le parent conserve l'enfant et l'enfant conserve son parent, n'est jamais sorti).

Le numéro sans frais de transition de la partie (moulage à partir d' NS de CF) est un peu délicat. Vous avez encore de gérer manuellement CFRelease() et CFRetain() de FC objets. Lorsque vous convertissez en arrière pour NS les objets que vous avez à dire au compilateur de conserver le comte de sorte qu'il sait ce que vous avez fait.

Ses tous ici.

2voto

rimsky Points 107

Pour appeler les parties de la documentation référencée par Robert qui répondra à vos questions de deux derniers explicitement :

C’est appelée une référence faible réduction à zéro. Vous pouvez créer des références faibles qui ne sont pas remise à zéro des références faibles en utilisant __unsafe_unretained, mais comme le nom l’indique, c’est généralement pas recommandé.

Également dans les docs :

0voto

user3767017 Points 1

laisser prendre un exemple d’élaborer davantage (au-dessus de réponse sont déjà grands), peut-être cet exemple permet un peu plus

Laissez nous avons deux classes A et B

le code ci-dessus va générer un cycle de conserver parce que les deux le type fort un---> b---> une

donc pour l’éviter vous devez utiliser la propriété de la semaine de l’une d’elle afin qu’elle chaque semaine faire référence à l’objet et il augmente pas de décompte de références.

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