我正在尝试为我工作的公司创建一个(网络)同步数组。虽然网络部分工作正常,但我已经陷入了一个问题。
我希望使用dispatch_create_queue
创建一个新队列,我将添加两个不的块在主线程上运行,但是以串行方式,这意味着首先必须运行第一个块,然后运行第二个块,而不是并行运行。
我已经阅读了苹果文档,但至少可以说是令人困惑的。
当我使用dispatch_queue_create
创建队列然后使用dispatch_sync
添加块(在它们被定义之后)时,我发现该块仍在主线程上执行
使用dispatch_async
时,那就是当主要线程上的块没有执行时。
当我尝试使用dispatch_sync
添加两个块时,它们会永远被阻止。
在调用dispatch_async
时,两个块似乎运行正常且离开主线程的唯一时间。
然而,我之所以选择GCD和同步方法,以至于我的印象是我正在创建一个新队列(因而是一个新线程),并且在该队列中添加块只会阻塞一个,直到另一个拥有完成执行。是不是这种情况,或者创建队列并不能保证代码不会在主线程上运行?
答案 0 :(得分:59)
这是GCD中的FIFO队列:
dispatch_queue_t serialQueue = dispatch_queue_create("com.blah.queue", DISPATCH_QUEUE_SERIAL);
...
dispatch_async(serialQueue, ^{
//block1
});
dispatch_async(serialQueue, ^{
//block2
});