【发布时间】: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