ブロック内で自己をキャプチャすることを回避する一般的なパターンは、ブロックの外側に弱い自己を作成し、これを使用してブロック内に自己の「ローカルに強い」バージョン (内部自己) を作成することです。
__weak ClassX *weakSelf = self;
[someOtherObject methodThatTakesCOmpletionBlock: ^{
ClassX innserSelf = weakSelf; //innserSelf creation?
[someObject send:innerSelf.prop;}];
innserSelf creation
行が実行されるとどうなりますか? メソッドが に送信された時点で、selfinnerSelf
のコピーですか?methodThatTakesCompletionBlock:
someOtherObject
この質問は、innserSelf 行が実行されたときに何が起こるかに焦点を当てています。関連するブロック内の弱い参照への強い参照を見てきましたが、この点に対処していません。