主要的Grand Central Dispatch队列是串行还是并发?

Spa*_*Dog 6 cocoa cocoa-touch grand-central-dispatch

假设我dispatch_async()按顺序拨打三次电话:

dispatch_async(dispatch_get_main_queue(),
         ^{
             [self doOne];
});

// some code here

dispatch_async(dispatch_get_main_queue(),
         ^{
             [self doTwo];
});

// more code here

dispatch_async(dispatch_get_main_queue(),
         ^{
             [self doThree];
});
Run Code Online (Sandbox Code Playgroud)

这总是会被执行吗?

[self doOne],[self doTwo],那么[self doThree],或者订单有保障?

在这种情况下,问题可能是主队列是串行还是并发.

Mar*_*n R 15

从文档:

dispatch_get_main_queue

返回与应用程序主线程关联的串行调度队列.

所以主队列是一个串行队列,并且[self doOne],[self doTwo],[self doThree]按该顺序顺序地执行.

  • 此外,它必须是串行的,因为块在同一个线程上运行.单个线程无法同时运行多个块. (2认同)