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

Objective-c: Instance variable and property with same name

找到这段代码,傻眼了:

@interface MyNode : NSObject {
    Node *node;
}

@property(nonatomic,strong) Node *node;

@end

这段代码的行为是什么?
我认为 "node" 的 属性 声明覆盖了先前声明的影子,不是吗?

我不关心这段代码的行为是什么。我关心编码标准及其用途。如果您的代码依赖于如此晦涩难懂的东西以至于您必须在这里提出问题,那么您就做错了。

你永远不应该有一个不以下划线字符开头的实例变量。改为将其设为 Node* _node。现在您不必再为此担心了。整个问题都消失了。

此外,打开编译器警告,以便编译器可以在您进行危险操作时告诉您。

您的代码的行为是您声明了一个 属性 和一个实例变量。 @property(nonatomic,strong) Node *node; 将有一个实例变量 _node 由编译器自动合成(这是在 Xcode 4.4 中引入的)。

因此,您的 class 现在有一个 node_node 实例变量。

也许如果你读了documentation那么当你遇到编程语言结构时就不会那么傻眼了!