最好使用全局或自定义命名的GCD队列?

时间:2012-09-04 16:34:50

标签: iphone objective-c cocoa-touch grand-central-dispatch

我的理解是// 001获得高优先级并发队列

// 001
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

并且// 002创建了一个新的自定义串行队列

// 002
dispatch_queue_t queue = dispatch_queue_create("bgQueue", NULL);

我的问题是,是否有可能其他进程(在iPhone上,其他应用程序等)将在全局队列中排队,因此您可能必须等待(尽管是短暂的)执行。如果是这种情况,最好始终创建您知道自己有访问权限的自定义队列吗?

2 个答案:

答案 0 :(得分:8)

  • 001 获取高优先级队列,而不是创建。将自动为您的应用程序创建三个全局队列;它们随时可用。
  • 三个全局队列仅在您的应用程序中是全局的,就像全局变量是全局的一样。这些队列对于创建它们的每个应用程序仍然是私有的。
  • 私有和全局队列之间的主要区别是曾经是私有队列 顺序,而全局队列是并发Table 3-1 of GCD documentation总结了两者之间的差异。 编辑:在OS X v10.7及更高版本中,私有队列现在也可以通过传递DISPATCH_QUEUE_CONCURRENT(感谢Rob,更正)来实现并发。

答案 1 :(得分:0)

在私有队列也可以并发(Lion或更高版本)的平台上,使用全局队列和私有队列的区别是什么?