Différences entre fort et faible en Objective-C

Je suis nouveau sur Obj-C, donc ma première question est la suivante:

Quelles sont les différences entre strong déclarations strong et weak de @property sur les objects?

Aussi, que signifie nonatomic ?

Une référence forte (que vous utiliserez dans la plupart des cas) signifie que vous voulez “posséder” l’object que vous référencez avec cette propriété / variable. Le compilateur veillera à ce que tout object que vous affectez à cette propriété ne soit pas détruit tant que vous le pointez avec une référence forte. Ce n’est qu’une fois que vous définissez la propriété sur nil que l’object sera détruit (à moins qu’un ou plusieurs autres objects y soient également référencés).

En revanche, avec une référence faible, vous indiquez que vous ne voulez pas contrôler la durée de vie de l’object. L’object que vous référencez faiblement ne vit que parce qu’au moins un autre object y fait référence. Une fois que ce n’est plus le cas, l’object est détruit et votre propriété faible est automatiquement définie à nil . Les cas d’utilisation les plus fréquents de références faibles sur iOS sont:

  1. déléguer des propriétés, qui sont souvent référencées faiblement pour éviter les cycles de conservation, et

  2. sous-vues / contrôles de la vue principale d’un contrôleur de vue, car ces vues sont déjà fortement occupées par la vue principale.

atomique vs. nonatomique fait référence à la sécurité des threads des méthodes getter et setter que le compilateur synthétise pour la propriété. atomic (la valeur par défaut) indique au compilateur de rendre les méthodes de l’accesseur thread-safe (en ajoutant un verrou avant l’access à ivar) et nonatomic fait le contraire. L’avantage du nonatomique est une performance légèrement supérieure. Sur iOS, Apple utilise des composants non atomiques pour presque toutes leurs propriétés. Le conseil général est donc de faire de même.

Il peut être utile de réfléchir à des références fortes et faibles en termes de ballons.

Un ballon ne s’envolera pas tant qu’au moins une personne tient une ficelle. Le nombre de personnes détenant des chaînes est le nombre de retenues. Lorsque personne ne tient une ficelle, le ballon s’envolera (dealloc). Beaucoup de gens peuvent avoir des ficelles à ce même ballon. Vous pouvez obtenir / définir des propriétés et appeler des méthodes sur l’object référencé avec des références fortes et faibles.

Une référence forte est comme tenir une corde à ce ballon. Tant que vous tenez une ficelle attachée au ballon, elle ne s’envolera pas.

Une référence faible est comme regarder le ballon. Vous pouvez le voir, accéder à ses propriétés, appeler ses méthodes, mais vous n’avez pas de chaîne pour ce ballon. Si tout le monde s’accroche à la corde, le ballon s’envole et vous ne pouvez plus y accéder.

strong : assigne la valeur entrante, conserve la valeur entrante et libère la valeur existante de la variable d’instance

faible : affectera la valeur entrante sans la retenir.

La différence fondamentale est donc la conservation de la nouvelle variable. Généralement, vous voulez le conserver, mais il existe des situations où vous ne voulez pas l’avoir, sinon vous obtiendrez un cycle de conservation et vous ne pourrez pas libérer la mémoire des objects. Par exemple. obj1 conserve obj2 et obj2 conserve obj1. Pour résoudre ce genre de situation, vous utilisez des références faibles.

Une réponse factice: –

Je pense que l’explication est donnée dans la réponse ci-dessus, alors je vais juste vous dire où utiliser STRONG et où utiliser WEAK :

Utilisation de Weak : – 1. Délégués 2. Points de vente 3. Sous-vues 4. Contrôles, etc.

Utilisation de Strong : – Restant partout qui n’est pas inclus dans WEAK .

fort et faible , ces mots-clés s’articulent autour de la propriété d’objects dans Objective-C

Qu’est-ce que la propriété de l’object?

Les variables de pointeur impliquent la propriété des objects vers lesquels elles pointent.

  • Lorsqu’une méthode (ou une fonction) a une variable locale qui pointe vers un object, cette variable est dite posséder l’object sur lequel on pointe.
  • Lorsqu’un object a une variable d’instance qui pointe vers un autre object, l’object avec le pointeur est dit être propriétaire de l’object pointé.

Chaque fois qu’une variable pointeur pointe sur un object, cet object a un propriétaire et rest actif. Ceci est connu comme une référence forte .

Une variable peut éventuellement ne pas prendre possession d’un object vers lequel elle pointe. Une variable qui ne prend pas possession d’un object est appelée une référence faible .

Cherchez une explication détaillée ici Démystifier @propriété et atsortingbuts

Ici, Apple Documentation a expliqué la différence entre une propriété faible et une propriété forte en utilisant différents exemples:

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

Ici, l’auteur de ce blog a rassemblé toutes les propriétés au même endroit. Cela aidera à comparer les caractéristiques des propriétés:

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

fort est le défaut. Un object rest «vivant» tant qu’il y a un pointeur fort.

faiblesse spécifie une référence qui ne garde pas l’object référencé en vie. Une référence faible est définie sur nil lorsqu’il n’y a pas de référence forte à l’object.

Strong : Basiquement utilisé avec les propriétés que nous utilisions pour obtenir ou envoyer des données de / dans une autre classe. Faible : Généralement, toutes les sockets, les connexions sont de type faible à partir de l’interface.

Nonatomique : ce type de propriétés est utilisé dans des conditions où nous ne souhaitons pas partager notre sharepoint vente ou notre object avec différents threads simultanés. En d’autres termes, l’instance Nonatomic rend nos propriétés pour traiter un thread à la fois. J’espère que cela vous sera utile.