【问题标题】:Which should I use: self.property or _property [duplicate]我应该使用哪个:self.property 或 _property [重复]
【发布时间】:2014-02-13 02:22:32
【问题描述】:

对不起,我不太了解 Objective-C。

这里是 SomeClass.h

@interface SomeClass : NSObject

@property NSString *property;

@end

我们可以在 SomeClass.m 中同时使用property

self.property

_property.

我应该使用哪个?

是否有一些情况可以决定使用哪种方式?

感谢您的帮助。

【问题讨论】:

  • 如果您不知道,请使用 self.property。

标签: objective-c


【解决方案1】:

通常在标准实践中,您只在 getter/setter/init/dealloc 方法中使用 _property。在所有其他情况下,您使用self.property[self property]

为什么?

使用_property严格用于直接赋值或获取值,而使用self.property与调用[self property]相同。

通过这种方式,您可以为所有类在使用此变量时必须遵守的方法创建自定义getter/setter,包括持有该变量本身的类

例如:

如果我打电话给object.property,我实际上是在打电话给[object property]。现在,如果您不定义自定义方法,这并不重要,但如果您在对象的类中有自定义 getter 或 setter 方法:

- (Type)property{
    return 2*_property;
}

//AND/OR

- (void)setProperty:(Type)property
{
    _property = 2*property;
}

那么使用_propertyself.property会有区别。

有意义吗?

【讨论】:

  • 您还应该在initdealloc 中使用直接访问。请参阅hereherehere
  • @Sebastian 答案已更新。感谢您指出这一点。
【解决方案2】:

self.property 调用(生成的)getter;相当于[self property]

_property 直接访问变量。

The general recommendation 是使用self.property,因为可能会覆盖 getter 以执行一些特殊的操作,例如额外的内存管理、延迟创建或其他操作。

【讨论】:

    【解决方案3】:

    使用self.property。 如果您有特殊原因忽略此属性的设置器,请使用_property

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2012-06-08
      • 1970-01-01
      • 2013-01-27
      • 2012-03-10
      • 2011-07-25
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      相关资源
      最近更新 更多