在 UIView 子类中我有这个属性:
@property (nonatomic) CGFloat scale;
#define DEFAULT_SCALE 0.90
还有这个 getter 和 setter:
-(CGFloat)scale
{
if (!self.scale) {
return DEFAULT_SCALE;
}else{
return self.scale;
}
}
-(void)setScale:(CGFloat)scale
{
if (scale != self.scale) {
self.scale = scale;
[self setNeedsDisplay];
}
}
这是不正确的,因为例如检查 getter 中的 self.scale 会导致无限循环。编写 getter 和 setter 以避免无限循环的正确方法是什么?
最佳答案
您应该能够以 _scale
的形式直接访问 ivar。你的 getter/setter 看起来像:
更新:正如@wattson12 在下面的评论中指出的,您需要在您的实现中添加一个@synthesize
。
@synthesize scale = _scale;
-(CGFloat)scale
{
if (!_scale) {
return DEFAULT_SCALE;
}else{
return _scale;
}
}
-(void)setScale:(CGFloat)scale
{
if (scale != _scale) {
_scale = scale;
[self setNeedsDisplay];
}
}
关于objective-c 属性 - getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162591/