ARC:成员变量和属性之间有什么区别?

时间:2012-08-02 22:50:00

标签: iphone ios

我有一个在整个UIViewController中使用的NSArray对象。我可以将其声明为ivar或属性。两种方法都有任何优势(考虑到我使用ARC)?

选项1:

@interface MyViewController {
    NSArray *_myArray;
}
@end

选项2:

@interface MyViewController
    @property (strong, nonatomic) NSArray *myArray;
@end

1 个答案:

答案 0 :(得分:1)

属性和ivars在概念上完全不同。

属性表示代码的逻辑组件。它可能(但不一定)由伊瓦尔支持。它可以是在运行时计算的动态生成(如视图的-frame)等。

ivar 是一个实际分配的内存块,包含一些数据。

如果您使用属性(正确),您可以获得很好的功能,如KVC / KVO合规性。由于这个原因和其他原因,通常认为这是一种很好的做法,特别是在现代运行时,以属性的形式声明所有公共接口,并在内部用ivars(通常使用@synthesize)支持它们,如果合适的话

就个人而言,我更喜欢使用私有数据的属性,以便在我想要的时候轻松公开(只需将声明移到标题!)并轻松提供属性的自定义实现(和setter / mutators)而不是依靠一个简单的ivar。

既然你提到了ARC,我还没有太多地使用它,但我认为只要你正确宣布你的财产就不会有太大的影响。

相关问题