【问题标题】:What name does the auto-generated ivar take when I just declare a property in XCode 4.5 onwards?当我在 XCode 4.5 以后声明一个属性时,自动生成的 ivar 取什么名字?
【发布时间】:2013-01-11 10:46:31
【问题描述】:

之前我在 Snow Leopard 上使用 XCode 4.2 很长时间。 我已经在 iOS 6 SDK 和 ARC 上使用 XCode 4.5 直接跳转到 Mountain Lion。

对我来说发生了很多变化。只是想知道,默认变量的命名方式是否发生了变化?

因为在旧版 XCode 中,如果我自己不声明 ivar,它将采用与属性相同的名称。

在 4.5 中,我声明了一个属性(不再需要综合!)。

在覆盖的 setter 中,我尝试使用与属性同名的变量,比如 abc。

但 XCode 无法识别它并给我 _abc 的建议!

自动生成的 ivar 现在是否以 _ 开头?

【问题讨论】:

  • 太糟糕了!打破向后兼容性!如果我有一个用 XCode 4.2 编写的代码,那么它不会在这里编译。虽然新的与输入参数名称和实例变量名称分开的自动生成器模板很好地工作。在较旧的 XCode 中,这会给我带来问题。
  • 从下面的答案中可以清楚地看出在这种情况下会发生什么。我收回关于向后兼容性的话!

标签: objective-c ios6 xcode4.5


【解决方案1】:

自动生成的@synthesize 语句使用带有下划线前缀的实例变量:

@synthesize abc = _abc;

但是没有实例变量的显式 @synthesize 语句

@synthesize abc;

仍然等价于

@synthesize abc = abc;

为了与旧 Xcode 版本兼容。

【讨论】:

  • 谢谢先生!这很有帮助!
猜你喜欢
  • 2012-11-23
  • 2017-09-19
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
相关资源
最近更新 更多