36 votes

fort / faible / conserver / unsafe_unretained / assigner

propriétés de la synthèse de la propriété : conserver / affectation

  • conserver - il est retenu, l'ancienne valeur est sorti et il est attribué
  • attribuez - il n'est attribué qu'

propriétés de la propriété : IOS5 = forts / faibles IOS4 = conserver / unsafe_unretained

  • forte (iOS4 = conserver) - je suis le propriétaire, vous ne pouvez pas dealloc ce avant de viser bien = conserver

  • faible (iOS4 = unsafe_unretained) - la même chose que de céder, de ne retenir ou de la libération

donc unsafe_unretained == attribuer?

@property (nonatomic, assign) NSArray * tmp;

est égal à ?

@property (nonatomic, unsafe_unretained) NSArray * tmp;

et vice-versa ?

si oui, lequel préférer lors de l'iOS4, ou pourquoi il y a (unsafe_unretained) si son exactement le même que l'attribuer?

et un délégué de l'iOS4 devrait être unsafe_unretained ou de l'attribuer?

47voto

Matthias Bauch Points 52145

si oui, lequel préférer lors de l'iOS4, ou pourquoi il y a (unsafe_unretained) si son exactement le même que l'attribuer?

vous devez utiliser unsafe_unretained. Vous voulez montrer le lecteur de votre code que vous avez réellement voulu utiliser de faibles, mais que ce n'était pas possible parce que la faiblesse n'est pas disponible sur la version d'iOS que vous souhaitez déployer.

Un jour vous allez déposer le support pour la version iOS4. Et ensuite, vous pouvez simplement recherche d' unsafe_unretained et de remplacer tous avec weak. Ce sera beaucoup plus facile que la recherche de l' assign et de déterminer si vous avez réellement signifiait assign ou weak

L'utilisation de l' unsafe_unretained crée plus lisible et compréhensible code où les intentions du développeur sont plus faciles à voir. Fondamentalement la même raison, nous utilisons YES au lieu de 1.

3voto

Neeraj Khede Points 344

Il y a quelques classes Cocoa et Cocoa Touch qui ne sont pas encore en charge les références faibles, ce qui signifie que vous ne pouvez pas déclarer une faiblesse de la propriété ou de la faiblesse de la variable locale pour garder une trace d'eux. Ces classes comprennent NSTextView, NSFont et NSColorSpace; pour la liste complète, voir la Transition à l'ARC Notes de Version.

Si vous avez besoin d'utiliser une faible référence à l'une de ces classes, vous devez utiliser un dangereux référence. Pour une propriété, l'utilisation de la unsafe_unretained attribut:

 @property (unsafe_unretained) NSObject *unsafeProperty;

Pour les variables, vous devez utiliser __dangereuse_consignes:

NSObject * __unsafe_unretained unsafeReference;

Un dangereux référence est similaire à une référence faible en ce qu'elle ne sait pas garder son objet vivant, mais il ne sera pas mis à zéro si l'objet de destination est libéré. Cela signifie que vous serez à gauche avec une balançant pointeur vers la mémoire occupé à l'origine par le désormais libéré de l'objet, d'où le terme "dangereux". Envoyer un message à un bancales pointeur de provoquer un accident.

Courtoisie:Apple (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html).

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