我找到了这段代码而且我傻眼了:
@interface MyNode : NSObject {
Node *node;
}
@property(nonatomic,strong) Node *node;
@end
此代码的行为是什么?
我认为"节点"的属性声明ovveride一个影子以前的宣言,不是吗?
答案 0 :(得分:1)
我不在乎这段代码的行为是什么。我关心编码标准以及它们有什么用处。如果你的代码依赖于那些模糊不清的东西,你必须在这里提问,那么你做错了。
你永远不应该有一个不以下划线字符开头的实例变量。改为使用Node * _node。现在你不用再担心了。整个问题都消失了。
此外,打开编译器警告,以便编译器可以告诉您何时执行危险操作。
答案 1 :(得分:1)
您的代码的行为是您声明了一个属性和一个实例变量。 @property(nonatomic,strong) Node *node;
将有一个由编译器自动合成的实例变量_node
(这是在Xcode 4.4中引入的)。
因此,您的班级现在有一个node
和_node
个实例变量。
也许如果你阅读documentation,那么当你遇到编程语言结构时,你就不会那么傻眼了!