2

如果 a 为 nil,会调用 doSomeCalculations 吗?

a.position = [self doSomeCalculations];

我想它必须因为 doSomeCalculations 可以改变状态,但我不确定。

4

2 回答 2

1

Ifposition是一个属性,并且您将语句重写为等效的括号语法,您最终会得到:

[a setPosition:[self doSomeCalculations]];

这里不执行惰性求值。当您考虑到所有这些带括号的表达式都转换为对的函数调用时,它与嵌套函数调用没有什么不同objc_msgSend()

objc_msgSend(a, sel_getUid("setPosition:"), objc_msgSend(self, sel_getUid("doSomeCalculations")));

底线是,[self doSomeCalulations]即使是,也会被a评估nil

于 2012-10-10T08:45:08.523 回答
0

是的。您正在分配[self doSomeCalculations]将返回的任何内容,a.position无论它是否为零。

此外,这可能取决于您是否为位置编写了自己的访问器,但如果您使用了@synthesized 访问器,它将被分配。

于 2012-10-10T08:45:36.570 回答