在 .h 文件中,有什么区别:
@interface ViewController : UIViewController
@property (strong, nonatomic) UIView* myView;
和
@interface ViewController : UIViewController{
UIView* myView;
}
在 .h 文件中,有什么区别:
@interface ViewController : UIViewController
@property (strong, nonatomic) UIView* myView;
和
@interface ViewController : UIViewController{
UIView* myView;
}
第一个是属性的声明,而第二个只是一个 ivar。属性是 ivar 的 getter 和 setter 的自动声明,但如果没有 ivar(如在您的第一个示例中),该属性也将创建 ivar。
主要区别在于 @property 对其他对象是可见的,并且可以使用您的类的实例被这些对象访问。
你可以在你的实现文件中使用@synthesize 来在你的实现中自动定义de getter setter函数。
更新(遵循@Graham Lee的建议)
根据您的实例变量 (@protected / @private / @public) 的可见性说明符,ivar 可以在您的实现文件、子类或其他类中使用。隐含值是@protected,因此在您的示例中,您的实现文件和子类可以看到它。