如果 a 为 nil,会调用 doSomeCalculations 吗?
a.position = [self doSomeCalculations];
我想它必须因为 doSomeCalculations 可以改变状态,但我不确定。
如果 a 为 nil,会调用 doSomeCalculations 吗?
a.position = [self doSomeCalculations];
我想它必须因为 doSomeCalculations 可以改变状态,但我不确定。
Ifposition
是一个属性,并且您将语句重写为等效的括号语法,您最终会得到:
[a setPosition:[self doSomeCalculations]];
这里不执行惰性求值。当您考虑到所有这些带括号的表达式都转换为对的函数调用时,它与嵌套函数调用没有什么不同objc_msgSend()
:
objc_msgSend(a, sel_getUid("setPosition:"), objc_msgSend(self, sel_getUid("doSomeCalculations")));
底线是,[self doSomeCalulations]
即使是,也会被a
评估nil
。
是的。您正在分配[self doSomeCalculations]
将返回的任何内容,a.position
无论它是否为零。
此外,这可能取决于您是否为位置编写了自己的访问器,但如果您使用了@synthesize
d 访问器,它将被分配。