Objective-c:实例变量和同名属性

Objective-c:实例变量和同名属性,objective-c,properties,instance-variables,Objective C,Properties,Instance Variables,我发现了这个密码,我目瞪口呆: @interface MyNode : NSObject { Node *node; } @property(nonatomic,strong) Node *node; @end 此代码的行为是什么? 我认为“node”的属性声明与之前的声明不一样,不是吗?我不关心这段代码的行为。我关心编码标准以及它们的用途。如果您的代码依赖于一些非常模糊的东西,以至于您不得不在这里提问,那么您就是做错了 您永远不应该拥有一个不以下划线字符开头的实例变量。改为使用N

我发现了这个密码,我目瞪口呆:

@interface MyNode : NSObject {
    Node *node;
}

@property(nonatomic,strong) Node *node;

@end
此代码的行为是什么?

我认为“node”的属性声明与之前的声明不一样,不是吗?

我不关心这段代码的行为。我关心编码标准以及它们的用途。如果您的代码依赖于一些非常模糊的东西,以至于您不得不在这里提问,那么您就是做错了

您永远不应该拥有一个不以下划线字符开头的实例变量。改为使用Node*\u Node。现在你不必再担心这个了。整个问题都解决了


此外,打开编译器警告,以便编译器可以在您执行危险操作时通知您

代码的行为是声明了一个属性和一个实例变量。
@属性(非原子,强)节点*节点
将有一个实例变量
\u node
由编译器自动合成(这是在Xcode 4.4中引入的)

因此,您的类现在有一个
节点
\u节点
实例变量


也许如果你读了这篇文章,当你遇到编程语言结构时,你就不会那么目瞪口呆了

您提到的“全局变量”在哪里?有一个实例变量和一个属性。你说得对,更新了!那么属性的自动合成呢。说“永不”是严格的。说你不必担心也不能解释为什么不。是的,我理解。但如果我声明名为“_node”的实例变量,程序还是要编译!!为什么?在这种情况下,编译器不需要自动生成“\u node”实例变量,因为您显式声明了它。当编译器自动生成“@synthesis node=_node”行时,它将使用您显式声明的实例变量。@OpenUserX03您提到的简洁明了的文档让我目瞪口呆。