319 votes

Les différences entre fort et faible dans l'objectif-c

Je suis nouveau à Obj-C, donc ma première question est:

Quelles sont les différences entre strong et weak dans les déclarations @property de pointeurs sur des objets?

Aussi, que signifie nonatomic?

Peut-être que cette question est stupide, mais je suis nouveau en informatique. Je suis un développeur web, donc je ne connais que les paradigmes de programmation de base.

Aussi, je serais heureux si vous pouviez suggérer quelques livres ou ressources qui peuvent m'aider à mieux comprendre les paradigmes de CS.

725voto

MJN Points 3425

Il peut être utile de penser au sujet de la solidité et de la faiblesse des références en termes de ballons.

Un ballon s'envole pas, à condition qu'au moins une personne s'accroche à une corde attachée à elle. Le nombre de personnes participant à des chaînes est de conserver le comte. Quand on s'accroche à une corde, le ballon va s'envoler (dealloc). Beaucoup de gens peuvent avoir des chaînes à la même ballon. Vous pouvez obtenir/définir les propriétés et appeler des méthodes sur l'objet référencé à la fois forts et faibles des références.

Une référence forte, c'est comme se tenant à une corde pour que le ballon. Tant que vous êtes accroché à une corde attachée au ballon, il ne va pas s'envoler.

Une référence faible est comme regarder le ballon. Vous pouvez le voir, l'accès aux propriétés, à l'appel de méthodes, mais vous n'avez pas de chaîne de cette bulle. Si tout le monde se tenant sur la chaîne laisse aller, le ballon s'envole, et vous ne pouvez pas y accéder plus.

656voto

Ole Begemann Points 85798

Une référence forte (ce qui vous permettra de l'utiliser dans la plupart des cas) signifie que vous voulez "propre" de l'objet que vous faites référence à cette propriété/variable. Le compilateur prendra soin que n'importe quel objet que vous attribuez à cette propriété ne sera pas détruit aussi longtemps que vous (ou tout autre objet), avec une référence forte. Seulement une fois que vous définissez la propriété d' nil sera l'objet de la destruction (sauf si un ou plusieurs autres objets ont également une forte référence).

En revanche, avec une référence faible, vous signifiez que vous ne voulez pas avoir de contrôle sur l'objet de la durée de vie. L'objet de référencement faiblement seulement dans nos vies parce que au moins un autre objet détient une solide référence. Une fois que ce n'est plus le cas, l'objet est détruit et votre faiblesse de la propriété sera automatiquement réglé nil. La plus fréquente des cas d'utilisation de la faiblesse des références dans iOS sont:

  1. délégué propriétés, qui sont souvent référencés faiblement pour éviter de conserver des cycles, et

  2. les sous-vues/contrôles de la vue du contrôleur de la vue principale, parce que ces points de vue sont déjà fortement occupé par l'affichage principal.

atomique contre nonatomic se réfère à la sécurité des threads de getter et setter que le compilateur fait la synthèse de la propriété. atomique (valeur par défaut) indique au compilateur de faire les méthodes d'accès à l'thread-safe (par l'ajout d'un verrou avant un ivar est accessible) et nonatomic fait le contraire. L'avantage de nonatomic est légèrement plus élevé de performance. Sur iOS, Apple utilise nonatomic pour presque toutes leurs propriétés si le conseil général est pour vous de faire de même.

25voto

Pfitz Points 4885

forte: assigne la valeur entrante, il va conserver la valeur entrante et la libération de la valeur actuelle de la variable d'instance

faible: affectez la valeur entrante à elle sans retenue.

Donc la différence de base est le maintien de la nouvelle variable. En général, vous voulez le conserver, mais il y a des situations où vous ne voulez pas avoir, sinon vous obtiendrez un cycle de conserver et ne peut pas libérer la mémoire les objets. Par exemple. obj1 conserve obj2 et obj2 conserve obj1. Pour résoudre ce genre de situation, l'utilisation de références faibles.

7voto

subh. singh Points 560

Ici, la Documentation d'Apple a expliqué la différence entre faibles et forts de la propriété à l'aide de différents exemples :

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW3

Ici, Dans ce blog, l'auteur a collecté toutes les propriétés dans un même lieu. Il vous aidera à comparer les propriétés caractéristiques :

http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html

7voto

iosRider Points 2796

fort est le défaut. Un objet reste "vivant" tant qu'il y a un pointeur fort.

weak indique une référence qui ne conserve pas l'objet référencé en vie. Une référence faible est définie sur zéro lorsqu'il n'y a aucune référence forte à l'objet.

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