0

在调度组中的队列完成执行后,我正在调用一个方法。但是,即使在所有队列都已执行之后,执行 final 方法也会有很大的延迟。谁能解释任何可能的原因?

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_async(group, queue,^{
     //some code             
}


dispatch_group_notify(group, queue,
    ^{
        [self allTasksDone];
    });

我的意思是,即使异步队列中的操作已经完成,allTask​​sDone 方法也会在延迟一段时间后执行。

4

2 回答 2

2

如何-allTasksDone工作?如果它通过更新用户界面元素与用户进行通信,它需要在主线程的上下文中运行,否则会出现相关的 UI 元素“延迟”——直到主运行它们才会更新循环恰好使它们更新。

试试这个:

dispatch_group_notify(group, dispatch_get_main_queue(),
^{
    [self allTasksDone];
});

事实上,您在-allTasksDone默认后台队列上运行,这与 AppKit 或 UIKit 不兼容。

于 2013-04-08T16:41:20.453 回答
0

我建议使用另一种方法,尽管您肯定可以使用调度组来完成此操作。

// Important note: This does not work with global queues, but you can use target queues to direct your custom queue to one of your global queues if you need priorities.
dispatch_queue_t queue = dispatch_queue_create("com.mycompany.myqueue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue,^{
     //some code             
}

dispatch_barrier_async(queue,
    ^{
        // this executes when all previously dispatched blocks have finished.
        [self allTasksDone];
    });
于 2013-04-09T07:03:46.290 回答