【问题标题】:Objective c synthesized property ivar [duplicate]Objective c综合属性ivar [重复]
【发布时间】:2012-06-23 20:56:52
【问题描述】:

可能重复:
How does an underscore in front of a variable in a cocoa objective-c class work?
Prefixing property names with an underscore in Objective C

当我们声明一个属性然后像这样合成它时,例如: @synthesize name = _name; 因此,_name 是我们将在以下实现中使用的 name 属性的实例变量。 我的问题是为什么我们需要这个 ivar,如果我没有创建 _name ivar 会发生什么? 谢谢。

【问题讨论】:

标签: objective-c


【解决方案1】:

我的理解是有一个默认的ivar名字,和属性名是一样的。使用下划线指定您自己的原因之一是为了消除您的 setter 中的歧义:

-(void) setFoo:(id) foo {
  // here, foo should ONLY refer to the passed-in var
  // If your ivar is the same, it is ambiguous.
  // If your ivar is _foo, then there is clarity.
}

【讨论】:

  • 哦,我明白了。所以就像在java中,会是这样的:this.name = name,为了明确右手边的name是参数,但是这里我们只是用_name来区分this,对吧?
  • 是的,在某些语言中,您必须使用 thisself 或其他东西来访问实例变量,但在 Objective-C 中则不然。看起来 self.name 和只是说 name 是一样的,但两者确实有很大的不同。 self.name 发送消息(实际上与 [self name] 相同)。直接使用name就是直接使用变量。
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2012-09-23
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
相关资源
最近更新 更多