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您提到的简洁明了的文档让我目瞪口呆。