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 に独自のアクセサーを作成したかどうかによっても異なりますが、@synthesize
d アクセサーを使用した場合は割り当てられます。