什么@synthesize变量= _variable会做什么?

时间:2011-06-29 18:57:05

标签: objective-c setter getter

例如,我在iPhone项目的Application委托中看到了类似的代码。

带下划线的变量是什么意思?我可以将它用作变量的setter和getter吗?

在释放变量时也应该使用:

  [variable release]; 

 [_variable release]; 

感谢。

3 个答案:

答案 0 :(得分:5)

在某些编码约定中,实例变量之前的下划线用于快速区分它们与其他变量。它还有助于避免在方法和子类方法中使用局部变量命名冲突。

@synthesize variable = _variable 

创建一个setter和getter,在这种情况下设置/获取你设置它的变量_variable。所以外部访问使用像object.variable这样的代码,它实际上只是返回_variable。但是这个类通常在内部使用_variable。

答案 1 :(得分:3)

@synthesize variable = _variable;

属性名称是“variable”,备份它的实例变量名为“_variable”。您应该使用访问者-variable-setVariable:而不是直接访问ivar,但在-init和-dealloc中除外,您将使用_variable

答案 2 :(得分:1)

在您的示例中,变量是属性,_variable是实例变量。为简单起见,我们可以说通过合成你实际上是在指示属性(在我们的例子中是变量)将使用实例变量(在我们的例子中是_variable)来存储和检索值。你真正在做的是指示编译器创建与属性声明中给出的规范相匹配的实现。

当您使用属性时,建议的释放方式是将其指定为零。这本质上会释放对象,并将实例变量设置为nil而不是悬空指针。

如果你没有使用属性,那么你可以在实例变量上调用release,然后理想情况下你想将它设置为nil。