我刚注意到,出于某种原因,我似乎没有在我的iOS 7项目中自动创建下划线iVars,我想知道为什么会这样。我的设置:
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' 。
为什么会这样?我认为下划线iVars总是自动合成?是因为我使用的类扩展吗?如果我放入@synthesize aNumber = _aNumber;
它(显然)有效。
答案 0 :(得分:3)
自动合成规则有一个例外。
如果覆盖属性的getter和setter,则必须手动合成属性。
自从自动合成出现以来,情况一直如此。
只需添加@synthesize行即可。