22

在我的应用程序的许多地方,我使用下一个代码来执行后台任务并通知主线程:

dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0);
    dispatch_async(backgroundQueue, ^{

   dispatch_async(dispatch_get_main_queue(), ^{


        });
    });

是否可以在一个地方创建一个 backgroundQueue(最好的方法在哪里?)并在以后使用它?我知道系统全局队列,但排序对我来说很重要。

4

4 回答 4

40

这样的事情应该可以正常工作:

dispatch_queue_t backgroundQueue() {
    static dispatch_once_t queueCreationGuard;
    static dispatch_queue_t queue;
    dispatch_once(&queueCreationGuard, ^{
        queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0);
    });
    return queue;
}
于 2013-08-01T17:14:44.373 回答
1
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0);

前面是串行队列,如果要创建并发队列,可以使用 DISPATCH_QUEUE_CONCURRENT。

在 iOS 5 及更高版本中,您可以通过将 DISPATCH_QUEUE_CONCURRENT 指定为队列类型来自己创建并发调度队列。

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto",
                                                   DISPATCH_QUEUE_CONCURRENT);
于 2016-01-21T00:51:56.800 回答
0

您也可以使用 NSOperationQueue 并向其推送操作。为确保操作不会乱序运行,您可以将 isConcurrent 设置为 NO。

于 2013-08-01T17:16:56.573 回答
-7
  dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                //back ground thread

                 dispatch_async( dispatch_get_main_queue(), ^{
                     // main thread
                      });
                });
于 2015-03-30T07:15:42.527 回答