如果宣布我自己的吸气剂和制定者,iVar无法识别

dam*_*ian 2 objective-c ios ios6

可能重复:
不使用getter和setter的属性

这是我面临的问题:我正在使用iOS 6.我在头文件中声明了一个属性:

@property (nonatomic) CGFloat scale;
Run Code Online (Sandbox Code Playgroud)

然后在实现中,我创建自己的getter/setter,如下所示:

#define DEFAULT_SCALE 0.90    

- (void)setScale:(CGFloat)scale
{
    if(_scale != scale) {
        _scale = scale;
        [self setNeedsDisplay];
    }
}

- (CGFloat) scale
{
    if(!_scale) {
        return DEFAULT_SCALE;
    } else {
        return _scale;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是编译器无法识别_scale.我得到错误"使用未声明的标识符'_scale'.如果我删除了getter或setter,那么它工作正常,但我不能同时保留两者.如果我这样做,我必须添加@synthesize scale = _scale以避免错误.有人可以解释为什么?

谢谢

tro*_*foe 6

@interface如果您要使用自己的setter/getter ,则需要声明实例变量:

@interface MyClass : NSObject
{
    CGFloat _scale;
}
...
@end
Run Code Online (Sandbox Code Playgroud)

编辑(OP问题后):

您的特定实现肯定会有所不同(它们不是简单的getter/setter方法,因为它们会起到副作用).但是我认为,如果你想要定位32位OSX,那么声明你的变量总是一个好主意,因为运行时不支持自动声明的实例变量.