Besoin de déclarer une variable d'instance publique en Objective-C
Je suis en train de déclarer quelques variables d'instance pour un bouton personnalisé de classe en Objective-C (iOS):
@interface PatientIDButton : UIButton {
NSUInteger patientID;
NSString * patientName;
}
@end
Cependant, elles sont maintenant en privé et j'ai besoin accessibles à d'autres classes. Je suppose que j'ai pu faire des fonctions d'accesseur pour eux, mais comment pourrais-je faire des variables elles-mêmes publique?
Pour info, en faisant ivars public est très unidiomatic et selon que vous utilisez un ARC peut grandement compliquer la gestion de la mémoire.
Ce que @chuck dit. Accès Direct aux variables d'instance est vraiment un mauvais modèle à utiliser. Les sauts de l'encapsulation et les défaites des choses comme le KVO.
Vous ne devriez pas utiliser explicite ivars. Apple, comme je le comprends, maintenant, encourage eux-mêmes (et utiliser) les propriétés exclusivement. Et avec les synthétiser, ils sont insignifiants et puissant.
Ce que @chuck dit. Accès Direct aux variables d'instance est vraiment un mauvais modèle à utiliser. Les sauts de l'encapsulation et les défaites des choses comme le KVO.
Vous ne devriez pas utiliser explicite ivars. Apple, comme je le comprends, maintenant, encourage eux-mêmes (et utiliser) les propriétés exclusivement. Et avec les synthétiser, ils sont insignifiants et puissant.
OriginalL'auteur easythrees | 2013-07-07
Vous devez vous connecter pour publier un commentaire.
De faire des variables d'instance publique, l'utilisation
@public
mot-clé, comme ceci:Bien sûr, vous devez vous rappeler toutes les précautions standard de l'exposition "brut" des variables pour l'accès public: vous serait mieux avec des propriétés, car vous permettrait de conserver la flexibilité de l'évolution de leur mise en œuvre au plus tard.
Enfin, vous devez vous rappeler que l'accès à des variables publiques nécessite un déréférencement - soit avec un astérisque ou avec la
->
opérateur:@property NSUInteger patientID
. Ensuite, chaque instance du bouton peut être l'accès par le biais de la norme Obj-C méthodes. myButton.patientID.Oui, une propriété de sens. Merci à tous!
Ne pas utiliser l' -> opérateur d'accéder à ivars.
Pourquoi, il faut
(*btn).patientID
être utilisé à la place?Lors de l'Objective-C a été créé, c'était un monde très différent. Il était à l'origine un petit Smalltalk-comme l'objet système sur le dessus de C, comme C Avec des Classes (qui a évolué en C++). Il n'y a pas de NSObject, il n'y avait même pas de tout conserver ou de libération, et la surcharge de message d'appels a été considéré comme décadent.
OriginalL'auteur dasblinkenlight