为BOOL变量编写getter和setter

显然,使用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方法的连续循环中。

这个代码是正确的还是我做错了什么?

谢谢汤姆

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

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

只需在访问器方法实现中直接使用iVars:

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

你不想使用self. setter / getter中的属性语法,因为它再次调用setter / getter,而不是直接赋值给变量。

你需要说:

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

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