Как использовать Grand Central Dispatch для запуска одного асинхронного вызова? - PullRequest
5 голосов
/ 26 июля 2011

Я хочу, чтобы один вызов происходил асинхронно, эквивалентно:

doThisInASecondThreadThenHaveThisThreadDisappear:@selector(myMethod);

Что такое вызов Grand Central Dispatch для достижения этой цели? Я новичок в этом, и я теряюсь со всеми сложными вещами с очередями. Я понимаю вещи, которые могут быть достигнуты с этим, но для этого простого случая (о котором я в настоящее время забочусь), я просто потерян

Ответы [ 2 ]

5 голосов
/ 26 июля 2011
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 голосов
/ 26 июля 2011

Вот краткий пример кода

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
    });                    
});    
...