【问题标题】:what @synthesize variable = _variable will do?@synthesize variable = t_variable 会做什么?
【发布时间】:2011-09-25 10:16:44
【问题描述】:

例如,我在 iPhone 项目的 Application delegate 中看到过类似的代码。

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

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

  [variable release]; 

 [_variable release]; 

谢谢。

【问题讨论】:

标签: objective-c setter getter


【解决方案1】:
@synthesize variable = _variable;

属性名称为“variable”,支持它的实例变量名为“_variable”。您应该使用访问器 -variable-setVariable:,而不是直接访问 ivar,除非在 -init 和 -dealloc 中使用 _variable

【讨论】:

    【解决方案2】:

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

    @synthesize variable = _variable 
    

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

    【讨论】:

    • 这是一篇旧帖子,但我想澄清一下。这样做是否会创建 setter 和 getter,所以只要在任何地方使用 object.variable 就可以正常运行吗?还是除此之外我还需要定义一个 setter 和 getter?
    • @rar 如果您有@property@synthesize,则为您创建了setter 和getter。之后你就可以访问 object.variable 了。
    • 哇,我当时写了一堆不必要的代码(因为我写出了getter)。谢谢!
    • @rar 它对保留属性特别有用——你不想写很多代码:)
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2021-12-01
      • 2010-10-22
      • 2011-01-05
      • 2010-11-12
      相关资源
      最近更新 更多