为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方法中省略测试…