我在iOS上使用GCD在后台线程上执行一个耗时的任务。API有一个start方法,它接受两个块作为参数,这两个块都是在主队列上调用的。第一个在任务开始时调用,第二个在任务完成时调用。这一切都行得通。
实际上,我需要完成其中一些耗时的任务。API允许我同时启动它们,然后等待它们完成,并通过这些块更新UI。它们同时运行。
然而,我实际上想要做的是对耗时的任务进行排序(仍然使用所描述的API启动每个任务),这样我就可以同时启动所有任务,让第一个任务运行并给我回调,然后让第二个任务运行并给我回调,等等,直到所有任务都完成。
使用GCD和块实现这一点的最佳方法是什么?
如果这些任务是同步的,我只会有一个循环,依次运行每个任务,然后异步运行所有这些任务。但是我有回调,所以这不会起作用。我不希望必须链接它们,因为一旦启动了事件序列,导致所有这一切发生的对象就会消失。
发布于 2011-08-26 23:24:56
您可以创建自己的串行队列,该队列将使用dispatch_queue_create以先进先出的顺序执行。您不需要指定它是串行队列。默认情况下,它将以这种方式运行。
队列创建示例:
dispatch_queue_t my_q = dispatch_queue_create("Serial",NULL);您拥有这个队列,所以不释放它(使用dispatch_release)将会泄漏它。
有关更多信息,请访问Apple's docs here。
发布于 2011-08-27 00:05:27
有没有什么特别的原因让你不得不使用GCD?听起来并发性为1的NSOperationQueue正是您想要的。
https://stackoverflow.com/questions/7206943
复制相似问题