キーワード「ブロック」と「自己」が出てきたすべてのスレッドは、サイクルを保持するためのものです。しかし、それはここで問題ではありません...Objective-Cブロックと自分自身をキャプチャ
私の質問は:なぜブロック外のself
のプロパティに加えられた変更がブロック内に表示されますか?私は価値観が「捕らえられる」と考えていましたか?つまり、ブロックが参照するのは元のオブジェクトのコピーです。ここで
が私のジレンマを説明するためのコードのビットです:
int a = 1;
self.someProperty.name = @"Foo";
[self.someProperty someMethodWithCompletionHandler:^() {
NSLog(@"%d", a);
NSLog(@"%@", self.someProperty.name);
}];
a = 2;
self.someProperty.name = @"Bar";
私が手出力は次のようになります。
1
Bar
ああ、そうです。だから、 '*'や '&'のようにObjective-Cのポインタを細かく制御しているわけではないので、ブロック内でアクセスされるオブジェクトはすべて参照によって行われますか? – Ash
オブジェクトは参照渡しされません。むしろ、オブジェクトへの参照が渡されます。これは微妙で重要な違いです。 – Avi
ご清聴ありがとうございます。これによりObjective-CはC++よりもJavaに似ているように見えます。 – Ash