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