gpt4 book ai didi

objective-c 属性 - getter 和 setter

转载 作者:可可西里 更新时间:2023-11-01 03:25:56 27 4
gpt4 key购买 nike

在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com