Instance变量与属性有什么不同?

Uni*_*nis 3 objective-c

我见过很多代码都是这样做的:

@interface Test0 : NSObject {
        @private int iVar;
}
@property (readwrite,assign) int iVar;
@end
Run Code Online (Sandbox Code Playgroud)

和其他一些代码:

@interface Test0 : NSObject {
}
@property (readwrite,assign) int iVar;
@end
Run Code Online (Sandbox Code Playgroud)

我知道你使用它@synthesize iVar来告诉编译器生成属性的getter和setter方法iVar.

我的问题:我们需要声明@private int iVar;实例变量吗?这样做有什么好处?声明实例变量与属性的最佳做法是什么?编译器是否将实例变量与属性相关联?

提前致谢.

Bar*_*ark 5

使用非脆弱基类(IIRC,OS X上的64位运行时以及iOS 4.0及更高运行时)的现代Objective-C运行时和编译器允许您省略实例变量.您的第一个示例是旧运行时所必需的,后者是现代运行时所需的全部.