objective-c 属性 - getter 和 setter

标签 objective-c ios uiview getter-setter

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

相关文章:

iphone - 当 NSLog 应用于它时,UILabel 没有在日志上提供文本。?

ios - 椭圆绘制算法中的二维变换

ios - 动画约束改变 UIViewController

ios - 向具有 mask View 的 View 添加 subview 会从中移除 mask

ios - UIView 在 UITableView header 中不可见

objective-c - 对 nil 对象进行快速枚举

ios - 如何将对象作为 Objective C init 中的依赖项传递?

objective-c - 当 iOS 设备锁定或应用程序处于后台时启动下载

ios - 在Swift中,如何从UITableView中获取对象id并根据对象id删除对象?

objective-c - 在 Objective-C 中删除动态创建的对象时,我应该将什么设置为 nil?