我在iOS上使用GCD在后台线程上执行一项耗时的任务。 API有一个start方法,它接受两个块作为参数,两个块都在主队列上调用。第一个在任务开始时调用,第二个在任务完成时调用。一切正常。
我实际上需要完成其中几项耗时的任务。 API允许我同时启动它们,然后等待每个完成并通过块更新UI。它们同时运行。
然而,我实际上想要做的是对耗时的任务进行排序(仍然使用所描述的API开始),以便我可以同时启动所有任务,让第一个运行并给我调用-backs,然后让第二个运行并给我回调等等,直到完成所有操作。
使用GCD和阻止实现此目标的最佳方法是什么?
如果任务是同步的,我只需要一个循环来依次运行每个任务,并以异步方式运行所有这些任务。但我有回电,所以这不起作用。我宁愿不必将它们链接起来,因为一旦它开始事件序列,使所有这一切发生的对象就会消失。
答案 0 :(得分:1)
您可以创建自己的串行队列,该队列将以dispatch_queue_create
的FIFO顺序执行。您不需要指定它是一个串行队列。它默认会以这种方式行事。
示例队列创建:
dispatch_queue_t my_q = dispatch_queue_create("Serial",NULL);
您拥有此队列,因此无法释放它(使用dispatch_release
)会泄漏它。
更多信息位于Apple's docs here。
答案 1 :(得分:0)
您是否有特殊原因需要使用GCD?听起来像NSOperationQueue并发1就是你想要的。