ios接口iVar vs Property

Chr*_* G. 11 objective-c ios

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

@interface ViewController : UIViewController
@property (strong, nonatomic) UIView* myView;
Run Code Online (Sandbox Code Playgroud)

@interface ViewController : UIViewController{
    UIView* myView;
}
Run Code Online (Sandbox Code Playgroud)

iSo*_*Tom 17

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


adi*_*dig 6

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

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

更新(遵循@ Graham Lee的建议)

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

  • 没有可见性修饰符的实例变量 - 就像这个问题中的那个 - 隐含地是"@ protected".它们远非无法从其他对象访问,它们可以在声明它们的类的任何子类中使用. (3认同)