显然,使用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方法中陷入连续循环。
这段代码是对的还是我做错了什么?
由于 汤姆
答案 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方法中省略测试...