我正在尝试为我工作的公司创建一个(网络)同步阵列。虽然网络部分工作正常,但我已经陷入了一个问题。
我的愿望是使用创建一个新队列dispatch_create_queue
,我将添加两个不在主线程上运行但以串行方式运行的块,这意味着首先第一个块必须运行,然后是第二个,并且永远不会在平行线。
我已经阅读了苹果文档,但至少可以说令人困惑。
当我使用创建队列
dispatch_queue_create
然后使用添加块(在它们被定义之后)dispatch_sync
时,我发现该块仍在主线程上执行。使用
dispatch_async
时,即块不在主线程上执行。当我尝试使用它们添加两个块时,
dispatch_sync
它们会被永久阻止。两个块似乎都运行良好并且脱离主线程的唯一一次是在调用
dispatch_async
.
然而,我之所以选择 GCD 和同步方法,是因为我的印象是我正在创建一个新队列(因此是一个新线程),并且向该队列添加块只会阻塞一个,直到另一个完成执行。不是这样,还是创建队列并不能保证代码不会在主线程上运行?