2

a が nil の場合、doSomeCalculations は呼び出されますか?

a.position = [self doSomeCalculations];

doSomeCalculations が状態を変更できるようにする必要があると思いますが、よくわかりません。

4

2 に答える 2

1

positionプロパティで、ステートメントを同等のブラケット構文に書き直すと、次のようになります。

[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

はい。nil であるかどうか[self doSomeCalculations]に関係なく、返されるものを割り当てています。a.position

また、position に独自のアクセサーを作成したかどうかによっても異なりますが、@synthesized アクセサーを使用した場合は割り当てられます。

于 2012-10-10T08:45:36.570 に答える