2

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

我的类.h

@property (readonly) NSNumber *aNumber;

我的班级.m

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

@implementation MyClass

(...)

- (NSNumber *)aNumber {
    return _aNumber;
}

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

@end

这导致Use of undeclared identifier: '_aNumber'

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

4

1 回答 1

3

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

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

自从自动合成出现以来,情况就一直如此。

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

于 2014-06-09T09:24:20.847 回答