【问题标题】:No automatic underscore ivar in Xcode 5.1.1Xcode 5.1.1 中没有自动下划线 ivar
【发布时间】:2014-06-09 09:13:07
【问题描述】:

我刚刚注意到,出于某种原因,我似乎没有在我的 iOS 7 项目中自动创建下划线 iVar,我想知道为什么会这样。我的设置:

MyClass.h

@property (readonly) NSNumber *aNumber;

MyClass.m

@interface MyClass ()
@property (readwrite, strong) NSNumber *aNumber;
@end

@implementation MyClass

(...)

- (NSNumber *)aNumber {
    return _aNumber;
}

- (void)setANumber:(NSNumber *)aNumber {
    _aNumber = aNumber;
}

@end

这会导致使用未声明的标识符:'_aNumber'

为什么会这样?我以为下划线 iVar 总是自动合成的?是因为我使用的类扩展吗?如果我输入@synthesize aNumber = _aNumber;,它(显然)可以工作。

【问题讨论】:

  • 原因是避免在不需要的时候生成多余的ivar。
  • 原因是为什么不这样做,因为你已经创建了一个自定义的getter方法,而自动合成在这种情况下不会为你创建任何东西,你必须在这种情况下手动进行。跨度>

标签: ios xcode automatic-properties ivar synthesize


【解决方案1】:

自动合成规则有一个例外。

如果您同时覆盖属性的 getter 和 setter,则必须手动合成该属性。

自从自动合成出现以来就是这种情况。

只需添加@synthesize 行就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 2014-09-09
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多