1. 在 .h 文件中,例如:
@interface PullToRefreshView : UIView { UILabel *lastUpdatedLabel; UILabel *statusLabel; CALayer *arrowImage; UIActivityIndicatorView *activityView; }
2. 在 .h 文件中,例如:
@property (nonatomic, strong) UIScrollView *scrollView;
3. 在 .m 文件中,例如:
@interface PullToRefreshView @property (nonatomic, strong) NSArray *titles; @end
4. 在 .m 文件中,例如:
@implementation TopicListViewController { PullToRefreshView *pull }
简而言之,是否是
1. 在头文件中的是 public 属性,在 .m 中的是 private 属性?
2. 在 @interface 和 @implementation 中用大括号扩起来的和 @property 有何区别?(除了synthesize方面)
3. 一般情况下应该如何写?
En supposant que la manière particulière d'utiliser @private pour déclarer des variables n'est pas prise en compte, dans object-c, tant que les variables et attributs déclarés peuvent être utilisés dans le fichier .m contenant cette déclaration.
Bien sûr, tout rendre public n'est pas conforme à l'encapsulation dans la conception orientée objet. Ces variables et attributs écrits directement en .m servent à masquer les informations et à assurer l'encapsulation. Le nom officiel de cette méthode est Category , qui est. considéré comme une méthode nécessaire pour écrire une bibliothèque object-c.
Donc, la réponse à toutes les questions :
Ce qui est écrit directement à l'intérieur de {} est variable d'instance , et ce qui est écrit avec @property devant est attribut . Pour les attributs, obj-c générera automatiquement une variable d'instance, puis lors de l'accès à l'attribut (en utilisant la méthode get/set ou en utilisant obj.attr), cette variable d'instance générée automatiquement sera utilisée et fera d'autres choses supplémentaires.
@Huan Du l'a déjà très bien dit, parlons de mes habitudes d'utilisation
1. Au lieu d'utiliser ivar, déclarez @property dans l'extension de classe, afin de pouvoir utiliser self.xxx en interne pour obtenir/définir la valeur, et le code aura l'air plus confortable.
2. Dans le fichier d'en-tête, déclarez uniquement les méthodes/propriétés visibles par le monde extérieur, afin que le contenu du fichier d'en-tête soit aussi petit et clair que possible. S’il existe une propriété en lecture seule en externe et en lecture-écriture en interne, vous pouvez re-déclarer la propriété en lecture-écriture dans l’extension de classe.
Vous pouvez utiliser @private devant l'instance
Mon approche générale, qui est également le format de code généré automatiquement par XCode, est d'écrire public en tant que @property et de le mettre dans le fichier .h, et privé en tant que
Mettez-le dans le fichier .m.
Les parenthèses vides sont une catégorie. Vous pouvez la laisser vide ou l'écrire comme cachée. Bref, les autres classes ne pourront pas voir cette propriété.