disp语句中的dispatch_async有什么区别

时间:2013-02-20 15:45:32

标签: iphone ios objective-c-blocks grand-central-dispatch dispatch-async

我想知道在以下表示为'A'和'B'的方法中使用dispatch_async之间的区别是什么。

A

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    for (int i = 0; i < 10; i++)
    {
        // do something
    }
});

B

for (int i = 0; i < 10; i++)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // do something

    });
}

2 个答案:

答案 0 :(得分:6)

语句A导致一个新任务,恰好包含一个循环。

语句B导致10个新任务,其中部分或全部任务可能在for循环完成后很长时间内完成。

答案 1 :(得分:0)

Dispatch_async安排在{}之间的块中指定的队列上运行的任何内容。

因此,在情况A中,遍历代码而不执行for循环。而是将forloop移动到指定的块。

在案例B中,您计划在不同的线程上运行块内的代码10次。坦率地说,我还没有见过这种组合。

如果您是iOS新手,您将主要在与主队列不同的队列中执行某些计算密集型工作的上下文中使用块。这允许UI保持响应(例如,您仍然可以滚动表格)...然后当您需要更新UI时,您执行上面的块,但调用主队列来更新您的UI。

希望这有帮助。