我无法理解下面的代码。它涉及带有 if 语句的 setter,该语句在执行之前要求 origin 变量为零(假)。
if语句中的否定运算符要求origin 为零(false)才能执行,它是如何在origin被赋值后执行的。
/**implementation file **/
-(void) setOrigin : (XYPoint *) pt
{
if (! origin)
origin = [[XYPoint alloc] init];
origin.x = pt.x;
origin.y = pt.y;
}
/** Main file **/
myPoint.x = 2;
myPoint.y = 3;
shape1.origin= myPoint;
myPoint.x = 2;
myPoint.y = 3;
shape1.origin= myPoint;
}
myRect.origin = myPoint;
^^该方法第一次出现时,该方法被执行,因为实例变量为零并且(!origin)有效。
但是,如果我在下一行更改 myPoint 的值并再次设置 myRect.origin = myPoint,则 setter 方法将不起作用,因为 (!origin) 不再为真,因为它已经包含上一个设置的非零值执行。尽管有这种逻辑,为什么它仍然执行?我错了吗?