Objective c 实例变量和属性之间有什么不同?
我见过很多这样做的代码:Objective c 实例变量和属性之间有什么不同?,objective-c,Objective C,我见过很多这样做的代码: @interface Test0 : NSObject { @private int iVar; } @property (readwrite,assign) int iVar; @end 以及其他一些代码: @interface Test0 : NSObject { } @property (readwrite,assign) int iVar; @end 我知道您使用@synthesis iVar告诉编译器为属性iVar生成getter和sett
@interface Test0 : NSObject {
@private int iVar;
}
@property (readwrite,assign) int iVar;
@end
以及其他一些代码:
@interface Test0 : NSObject {
}
@property (readwrite,assign) int iVar;
@end
我知道您使用@synthesis iVar
告诉编译器为属性iVar
生成getter和setter方法
我的问题是:
我们是否需要声明@private int-iVar代码>实例变量?
这样做有什么好处?声明实例变量与属性的最佳实践是什么?
编译器是否将实例变量与属性链接
提前感谢。现代Objective-C运行时和使用非脆弱基类(IIRC、OS X上的64位运行时以及iOS 4.0及更高版本的运行时)的编译器允许您省略实例变量。您的第一个示例对于较旧的运行时是必需的,现代运行时只需要后者。感谢您的澄清,因此为了最佳实践和安全起见,我应该始终使用第一个方法?@Unis,如果您仅针对现代运行时,最佳实践可能是跳过实例变量;代码越少越好。如果您需要与较旧的运行时兼容,您别无选择,只能继续声明实例变量。跳过ivar声明可能会更好,因为它会使头文件看起来不那么凌乱。