2010-11-28 35 views
3

我已经看到了很多这样做代码:实例变量与属性有什么不同?

@interface Test0 : NSObject { 
     @private int iVar; 
} 
@property (readwrite,assign) int iVar; 
@end 

和其他一些代码:

@interface Test0 : NSObject { 
} 
@property (readwrite,assign) int iVar; 
@end 

我知道您使用@synthesize iVar告诉编译器生成的getter和setter方法为财产iVar

我的问题: 我们是否需要声明@private int iVar;实例变量? 这样做的好处是什么?声明实例变量vs属性的最佳做法是什么? 编译器是否将实例变量与属性链接起来?

在此先感谢。

回答

5

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

+0

感谢您的澄清,所以为了最佳实践和安全,我应该总是使用第一种方法? – Unis 2010-11-30 00:37:50

相关问题