11

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

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

@interface ViewController : UIViewController{
    UIView* myView;
}
4

2 回答 2

17

第一个是属性的声明,而第二个只是一个 ivar。属性是 ivar 的 getter 和 setter 的自动声明,但如果没有 ivar(如在您的第一个示例中),该属性也将创建 ivar。

于 2012-10-16T12:16:21.313 回答
6

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

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

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

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

于 2012-10-16T12:18:29.900 回答