通常惰性初始化技术与指向对象的指针一起使用,而不是与原始类型一起使用。这是因为BOOL只有两种可能的状态:NO和YES,没有通常与对象的nil相关联的“未定义状态” 。
它不切换的原因是你没有切换它,你只是在它等于NO时将它设置为YES ,但是当它等于YES时你没有处理这种情况。如果您想切换它,只需执行以下操作:
-(BOOL)turn
{
return _turn= !_turn;
}
PS:谁能争辩说您的方法不是正确的吸气剂,因为您在返回之前更改了变量。所以我建议只返回 _turn 而不切换它,并创建另一个单独的方法来切换变量。
另外我想提一下,你所做的不叫惰性初始化,我给你看一个惰性初始化的例子:
// In the interface:
@property(nonatomic,readonly) NSNumber* turnObject;
// In newer compiler versions it should be auto synthesized to _turnObject
// In the implementation:
-(BOOL) turn
{
// In this case I am not toggling it
if(!_turnObject) // Equal to if(turnObject==nil)
_turnObject= @(NO); // Equal to _turnObject=[NSNumber numberWithBOOL: NO];
return _turnObject;
}