2011-10-28 10 views
3

は私がGCDについての記事を読んで、そして例があります:Autoreleasepoolとdispatch_async

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に呼び出されます)クリックハンドラでそのメソッドを配置すると、私はので、のstringValueを喪失しますautoreleasepoolはクリックイベントの後に破棄されますか?

答えて

9

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

+0

今、それは意味があります、ありがとう – INs