创建自定义顺序全局调度队列

时间:2013-08-01 17:04:35

标签: ios objective-c grand-central-dispatch

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

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

   dispatch_async(dispatch_get_main_queue(), ^{


        });
    });

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

4 个答案:

答案 0 :(得分:39)

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

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;
}

答案 1 :(得分:0)

您还可以使用NSOperationQueue并将操作推送到它。要确保操作不会无序运行,可以将isConcurrent设置为NO。

答案 2 :(得分:0)

queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0);

Preceding是Serial Queue,如果你想创建并发队列,你可以使用DISPATCH_QUEUE_CONCURRENT。

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

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto",
                                                   DISPATCH_QUEUE_CONCURRENT);

答案 3 :(得分:-7)

  dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                //back ground thread

                 dispatch_async( dispatch_get_main_queue(), ^{
                     // main thread
                      });
                });