为BOOL变量编写getter和setter

时间:2010-11-04 16:49:01

标签: ios objective-c cocoa

显然,使用obj-c,通常没有理由编写getter和setter(感谢有用的mr @synthesize)。

所以现在,需要这样做,我遇到了一个我不知道如何编写它们的问题。 :P

我确信我可能不会以正确的方式解决我的问题 - 将子类化为子类会更容易 - 但我正在尝试编写类别代码以添加属性,因为(在开始)它更快,因为我想学习如何在我的应用程序中使用类别代码。

我有这个:

-(BOOL)isMethodStep {
    return self.isMethodStep;
}

-(void)setIsMethodStep:(BOOL)theBoolean {
    if(self.isMethodStep != theBoolean){
        self.isMethodStep = theBoolean;
    }
}

我在setter中没有if查询就试过了,但似乎都没有用。使用断点加载它会显示由于某种原因它会在getter方法中陷入连续循环。

这段代码是对的还是我做错了什么?

由于 汤姆

2 个答案:

答案 0 :(得分:11)

-(BOOL)isMethodStep {
    return self.isMethodStep;
}

return self.isMethodStep;调用相同的isMethodStep方法导致无限循环。对于二传手也一样。

直接在您的访问者方法实现中使用您的iVars:

-(BOOL)isMethodStep {
    return isMethodStep;
}

-(void)setIsMethodStep:(BOOL)theBoolean {
    if(isMethodStep != theBoolean){
        isMethodStep = theBoolean;
    }
}

答案 1 :(得分:4)

您不希望在setter / getter中使用self.属性语法,因为它会再次调用setter / getter,而不是直接分配给变量。

你只需说:

-(BOOL)isMethodStep {
    return isMethodStep;
}

-(void)setIsMethodStep:(BOOL)theBoolean {
    isMethodStep = theBoolean;
}

(假设“isMethodStep”是变量的名称)。我也会在setter方法中省略测试...