Autoreleasepoolとdispatch_async

私はGCDに関する記事を読んでいて、その例があります:

dispatch_queue_t bgQueue = myQueue;
dispatch_async(dispatch_get_main_queue(), ^{
    NSString *stringValue = [[[textField stringValue] copy] autorelease];
    dispatch_async(bgQueue, ^{
       //use stringValue in the background now
    });
});

私はそのメソッドをクリックハンドラ(autoreleasepoolで呼び出されます)に配置すると、クリックイベント後にautoreleasepoolが破棄されるため、stringValueが失われますか?

3

1 答え

その内側のブロックの中に?いいえ、あなたはその価値を失うことはありません。 Objective-Cオブジェクト変数( __ block として宣言されていない)がブロック内で参照され、ブロックがコピーされると、そのオブジェクトは自動的に保持されます。ブロックが解放されると、そのオブジェクトも解放されます。 dispatch_async()はブロックのコピーと解放を行います。

9
追加された
今それは意味があります、ありがとう
追加された 著者 INs,