Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 实例变量和属性之间有什么不同?_Objective C - Fatal编程技术网

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声明可能会更好,因为它会使头文件看起来不那么凌乱。