iVar不承认如果宣布我自己的getter&setter

可能重复:
属性不与getter和setter一起工作

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

@property (nonatomic) CGFloat scale; 

然后在实现中,我创build了我自己的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; } } 

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

谢谢

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

 @interface MyClass : NSObject { CGFloat _scale; } ... @end 

编辑 (OP问题之后):

你的特定实现肯定会有所作为(它们不是简单的getter / setter方法,因为它们做某些副作用)。 不过,我认为,如果您想要定位32位OSX,则声明variables并绝对必要是个好主意,因为运行时不支持自动声明的实例variables。

如果你提供了一个完整的实现(getter和setter),编译器假定你不需要一个ivar,所以如果你还想要一个,你必须自己创build一个。 要么做一个伊娃,要么让@synthesize为你做。 最终的结果是一样的(一个伊娃被创build); 唯一的区别是在第一种情况下,你可以实际调用任何你想要的。

略有不同,但相关我经常有一个

 @property (nonatomic,readonly) SomeThing* something; 

并提供一种方法

 - (Something*) something { return xxxxxx; } 

如果你有一个方法返回的东西,但有一个属性是一个快捷方式。