2011-07-26 13 views
5

私は1つのコールを持っていると思いますが、非同期に発生する、のと同等:Grand Central Dispatchを使用して1つの非同期コールを開始するにはどうすればよいですか?

doThisInASecondThreadThenHaveThisThreadDisappear:@selector(myMethod);

は、これを達成するためのグランドセントラルディスパッチコールは何ですか?私はそれが初めてで、キューイングで複雑なものをすべて失ってしまいます。私はそれを達成することができる事を理解しますが、この単純なケース(私は現在、気にすることを)のために私はちょうど

答えて

5
dispatch_queue_t queue = dispatch_queue_create("queueName", NULL); 
dispatch_async(queue, ^(void) { 
    // code to execute here 
}); 
dispatch_release(queue); 

を失ったんだそれとも、メインスレッドを使用する必要がある場合:

dispatch_async(dispatch_get_main_queue(), ^(void) { 
     // code to execute here 
}); 
+3

です。これは、メモリ管理を行う必要がないので望ましいことがあります。 – zneak

+0

@ zneakあなたはまさに彼らがどのように見えるかを精緻化できますか? – Nektarios

+0

'dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_NORMAL、0);' – zneak

3

は、ここでは簡単のコード例あなたはまた、代わりにキューを作成するための世界的な同時キューのいずれかを取得するには、 `dispatch_get_global_queue`を使用することができます

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);  
dispatch_async(queue, ^{ 
    // Stuff to do on another thread 
    // Mostly heavy calculations 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Stuff to do on main thread 
     // Mostly UI stuff 
    });      
});  
+6

グローバルキューを解放する必要はありません。最後の呼び出しはnopです(とにかく、ペタンティックモードでは、ペアリングdispatch_retainが存在しません)。 –

+0

@Grzegorz Adam Hankiewicz、情報ありがとう! – Tudorizer

関連する問題