1

ブロック内のローカル変数(ivarを含む)への参照は、ブロックの実行中ずっと有効であるように自動的に保持されます。

self.messageそうは言っても、最初のブロックはそれを参照していませんが、2番目のブロックはそれを参照しているので、このコードは時期尚早の割り当て解除につながりますか?それとも、それを保持する必要があることを知るのに十分賢いですか?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    /* snip */
    dispatch_async(dispatch_get_main_queue(), ^{
        if ([self.message.ID isEqualToString:@"foobar"]) {
            /* snip */
        }
    });
});
4

1 に答える 1

3

ブロックは、ネストされたブロックを含む、その中のすべての変数をキャプチャします。要するに、それは「正しい」ことをします。

この特定のケースでは、selfキャプチャされているのではなく、キャプチャされていることに注意してくださいself.message

于 2012-08-17T07:07:40.320 に答える