est-il mauvais de créer @properties pour les variables privées uniquement pour les avantages de la gestion de la mémoire?
Il semble que ce soit désordonné et mal à faire face au public @properties pour de nombreuses variables privées. P>
(principalement je Suis relâchant des ivars privés pendant des conditions de mémoire faible en utilisant les méthodes "événement" respectives.) p>
mais avec @properties, je peux le faire: p> Plus tard dans mon code, cela fera cela, d'où la nécessité de se mettre en nil: p>
3 Réponses :
Pour les propriétés publiques, je ne pense pas qu'Apple le recommande, car parfois, la fixation d'une propriété à NIL peut avoir des effets secondaires autres que simplement libérer la variable (notifications KVO ou une méthode de setter personnalisé qui fait autre chose). P >
Quant aux propriétés privées, je ne suis pas trop sûr. L'utilisation d'une propriété ne vous sauvera que quelques coups de clé tout en codant, mais vous le rendez aussi légèrement plus complexe et fragile. Je privilégie la lisibilité et la maintenabilité sur la commodité pour écrire, car vous gagnerez du temps à long terme. P>
Citation de la documentation Apple dans la référence de la classe UIViewController pour la méthode - (vide) ViewDiduLload: "Le moyen préféré de renoncer à la propriété de tout objet (y compris ceux dans les points de vente) consiste à utiliser la méthode d'accesseur correspondante pour définir la valeur de l'objet à NIL"
J'ai regardé autour de moi pour trouver la raison originale pour laquelle je pensais que c'était mauvais (parce que j'ai oublié), et j'ai trouvé ceci: Stackoverflow.com/Questtions/192721/... . Il semble que ce n'est qu'une préoccupation dans l'init ou la transloc.
Les propriétés existent pour votre commodité. Si vous ne voulez pas que d'autres personnes utilisent des propriétés existantes dans vos classes, ne les documentez pas. P>
Mais ils sont visibles dans votre fichier .h. andyvn22 a une solution alternative à cela.
Une alternative est de garder la propriété privée. Vous pouvez utiliser le code suivant (dans votre fichier .m) pour rendre l'établissement uniquement accessible dans votre classe:
#import "MyClass.h" @interface MyClass () @property (retain) NSString* privateString; @end @implementation MyClass @synthesize privateString; // Your code here @end
C'est génial, mais cela semble être un hack. Je ne suis pas sûr que je vais faire cela dans mon code, mais au moins je sais qu'il y a une alternative à ce que je fais maintenant. Merci!!
Ce n'est pas un piratage, c'est une forme explicite de catégorie appelée extension. << Un href = "https://developer.apple.com/mac/library/documentation/cocoa/conceptual/objectivec/articles/arcategories.html#/apple_ref/doc/uid/PR30001163-ch20-sw2" rel = "NOFOOL NOREFERRER"> développeur.apple.com/mac/library/documentation/cocoa/concept ual / ... >. "Il est courant que la classe ait une API déclarée publiquement et d'avoir ensuite une API supplémentaire déclarée à titre privé pour une utilisation uniquement par la classe ou le cadre dans lequel la classe réside"
Il n'est absolument pas un piratage et est à 100% en ligne avec la raison pour laquelle les extensions de classe ont été ajoutées à la langue en premier lieu. Embrasser ce modèle avec Gusto.
J'ai compris. Je vais commencer à utiliser cela alors.
Vous avez maintenant la prestation maintenant que les appels à PrivateString vont maintenant causer un avertissement de compilateur. Toutefois, si vous les ignorez et appelez d'une autre classe [myClassinstance priviling], le programme répondra au sélecteur et ne déclenchera pas une erreur.