Objective-c:实例变量和具有相同名称的属性

时间:2015-03-20 16:13:44

标签: objective-c properties instance-variables

我找到了这段代码而且我傻眼了:

@interface MyNode : NSObject {
    Node *node;
}

@property(nonatomic,strong) Node *node;

@end

此代码的行为是什么?
我认为"节点"的属性声明ovveride一个影子以前的宣言,不是吗?

2 个答案:

答案 0 :(得分:1)

我不在乎这段代码的行为是什么。我关心编码标准以及它们有什么用处。如果你的代码依赖于那些模糊不清的东西,你必须在这里提问,那么你做错了。

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

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

答案 1 :(得分:1)

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

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

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

相关问题