ios接口iVar vs Property

时间:2012-10-16 12:11:54

标签: objective-c ios

在.h文件中,有什么区别:

@interface ViewController : UIViewController
@property (strong, nonatomic) UIView* myView;

并且

@interface ViewController : UIViewController{
    UIView* myView;
}

2 个答案:

答案 0 :(得分:15)

第一个是财产的声明,而第二个只是一个ivar。 属性是avar的getter和setter的自动声明,但是如果没有ivar(就像在你的第一个例子中那样),属性也将创建ivar。

答案 1 :(得分:6)

主要区别在于@property对其他对象是可见的,并且可以使用您的类的实例来访问它们。

您可以在实现文件中使用@synthesize来自动化实现中的定义de getter setter函数。

已更新(关注@ Graham Lee 的建议)

根据实例变量(@protected / @private / @public)的可见性说明符,可以在实现文件,子类或其他类中使用ivar。隐式值是@protected,因此在您的示例中,它将对您的实现文件和子类可见。