iOS接口iVar与Property的区别

12
在一个.h文件中,下面两种声明有什么区别:
```c extern int x; int y; ```
@interface ViewController : UIViewController
@property (strong, nonatomic) UIView* myView;

And

@interface ViewController : UIViewController{
    UIView* myView;
}

1
不要对 myView 使用 strong,这会创建一个循环引用。请参考此处 - Muhammad Waqas
2个回答

17

第一个是属性的声明,而第二个只是一个实例变量。

属性是自动声明实例变量的getter和setter,但是如果没有实例变量(比如在第一个例子中),属性也会创建实例变量。


简短而精确的编程内容..!! 完美..!! - Shradha

6
主要区别在于 @property 可以被其他对象看到,并且可以通过类的实例来访问它。您可以在实现文件中使用 @synthesize 来自动定义 getter 和 setter 函数。
根据实例变量的可见性限定符(@protected / @private / @public),ivar 可以在实现文件、子类或其他类中使用。隐式值为 @protected,因此在您的示例中,它将对实现文件和子类可见。

3
没有可见性修饰符的实例变量——就像在这个问题中的那个——隐式地是@protected的。它们并不是不能被其他对象访问,而是可以在声明它们所属的类的任何子类中使用。 - user23743

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接