a が nil の場合、doSomeCalculations は呼び出されますか?
a.position = [self doSomeCalculations];
doSomeCalculations が状態を変更できるようにする必要があると思いますが、よくわかりません。
a が nil の場合、doSomeCalculations は呼び出されますか?
a.position = [self doSomeCalculations];
doSomeCalculations が状態を変更できるようにする必要があると思いますが、よくわかりません。
がpositionプロパティで、ステートメントを同等のブラケット構文に書き直すと、次のようになります。
[a setPosition:[self doSomeCalculations]];
ここでは遅延評価は実行されません。これらの括弧で囲まれたすべての式が への関数呼び出しに変換されることを考えると、ネストされた関数呼び出しと何ら変わりはありませんobjc_msgSend()。
objc_msgSend(a, sel_getUid("setPosition:"), objc_msgSend(self, sel_getUid("doSomeCalculations")));
肝心なのは、[self doSomeCalulations]であっても評価されることaですnil。
はい。nil であるかどうか[self doSomeCalculations]に関係なく、返されるものを割り当てています。a.position
また、position に独自のアクセサーを作成したかどうかによっても異なりますが、@synthesized アクセサーを使用した場合は割り当てられます。