【问题标题】:Is it safe to assume that leading underscores are ignored when using the dot syntax假设使用点语法时忽略前导下划线是否安全
【发布时间】:2014-05-24 16:26:52
【问题描述】:

快速提问。我参加的所有教授目标 C 的课程总是在它们的实例变量前加上下划线。他们还解释说,当使用点语法时,您不必在访问实例变量时包含前导下划线。他们从未明确说过在 Objective C 中使用点语法将始终忽略前导下划线,这就是我的问题。点语法是否总是忽略 Objective C 中的前导下划线?

为了消除混淆,如果我有一个类 Item 并且它有一个名为 *_itemName 的实例变量,我可以稍后(在 main 中)使用点语法设置该变量,并使用 @987654323 忽略前导下划线@

当我第一次开始使用 Obj-C 时,我会认为我必须设置 _itemName,包括带有 Item._itemName = something 的下划线。

那么点语法会忽略前导下划线吗?

【问题讨论】:

  • 忽略是什么意思?直接 ivar 访问和属性访问是两个不同但相关的事物。 ivar 和属性有不同的名称。
  • @JoshCaswell 我编辑了我的帖子以更好地解释我的问题

标签: objective-c syntax underscores


【解决方案1】:

“点语法”实际上并不是访问实例变量的快捷方式,而是访问属性*的快捷方式。

属性可能从一个实例变量中保存/加载它们的数据,但它们也可以从大量其他变量中获取它们的数据。它们旨在作为一种抽象和间接层。

* 从技术上讲,您可以将它用于任何看起来像属性方法的方法...但通常强烈不鼓励这样做。不要那样做!

【讨论】:

  • 我编辑了我的问题以澄清我想问的问题。虽然我知道不鼓励这样做并且我不打算这样做,但我只是对 dot 是否“应该”像它一样忽略前导下划线感到困惑。
  • 您的星号有点不清楚。大多数在概念上实际上看起来像属性的方法都是属性。我认为您的意思是 getter 语法可用于任何零参数方法——即使它不是 getter——而 setter 语法可用于任何单参数方法,即使它不是二传手。只要它们是事实上的属性,就可以将其用于未声明属性的事物。
  • @user1806716:我不认为你理解 Kitsune 的回答。它没有忽略任何下划线。它正在调用itemName 属性的访问器,这是访问_itemName 实例变量的方法。任何地方都不会忽略下划线。
猜你喜欢
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多