ブロック内で自己を捕らえるのを避けるための一般的なパターンは、ブロックの外側に弱い自己を作成し、これを使用してブロック(内部自己)内に自己の「局所的に強い」バージョンを作成することです。強いポインタに弱いポインタを割り当てるとオブジェクトがコピーされますか?
__weak ClassX *weakSelf = self;
[someOtherObject methodThatTakesCOmpletionBlock: ^{
ClassX innserSelf = weakSelf; //innserSelf creation?
[someObject send:innerSelf.prop;}];
innserSelf creation
行が実行されるとどうなりますか? がsomeOtherObject
に送信された時点でinnerSelf
はコピーの自己ですか?
この質問は、innserSelf行が実行されたときに起こることに焦点を当てています。私はStrong reference to a weak references inside blocksを見てきましたが、これは関連していますが、この点には言及していません。
@Josh Caswell答えが私の質問の1つに対処していません。 'ClassX innserSelf = weakSelf;'行が実行されるとどうなりますか?自己オブジェクトをコピーし、そのオブジェクトの参照を保持しますか?私は自分の質問を編集しただけです。あなたは旗を取り除くことができますか? –
ポインタの割り当てがないと、オブジェクトのコピーが作成されます。 –
「ポインタを割り当てないとコピーが作成されますか?」とはどういう意味ですか?あなたは "ポインタの割り当ては**コピーを作成しない**"と言いたいですか?それがコピーを作成しない場合、この内側のものの全体のポイントは何ですか?自己が指摘している「記憶の部分」を強く参照しているように見えます。 –