代码笔记
@interface MyViewController :UIViewControlle
{
UIButton *myButton;
}
@property (nonatomic, retain) UIButton *myButton;
@end
类与类别中添加的属性要区分开来,因为类别中只能添加方法,不能添加实例变量。经常会在 ios 的代码中看到在类别中添加属性,这种情况下,是不会自动生成实例变量的。比如在:UINavigationController.h 文件中会对 UIViewController 类进行扩展
@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationItem *navigationItem;
@property(nonatomic) BOOL hidesBottomBarWhenPushed;
@property(nonatomic,readonly,retain) UINavigationController *navigationController;
@end
总结
这里添加的属性,不会自动生成实例变量,这里添加的属性其实是添加的 getter 与 setter 方法。
注意一点,匿名类别(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法)。
成员变量用于类内部,无需与外界接触的变量。
根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。
一些建议
- 如果只是单纯的 private 变量,最好声明在 implementation 里.
- 如果是类的 public 属性,就用 property 写在.h 文件里
- 如果自己内部需要 setter 和 getter 来实现一些东西,就在.m 文件的类目里用 property 来声明