web-dev-qa-db-ja.com

カスタムの順次グローバルディスパッチキューを作成する

アプリの多くの場所で、次のコードを使用してバックグラウンドタスクを実行し、メインスレッドに通知します。

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

   dispatch_async(dispatch_get_main_queue(), ^{


        });
    });

BackgroundQueueを1か所(どこが最善の方法ですか?)に作成し、後で使用することはできますか?システムグローバルキューについては知っていますが、順序は重要です。

22
pvllnspk

このような何かがうまくいくはずです:

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

NSOperationQueueとそれにプッシュ操作を使用することもできます。操作が順不同で実行されないようにするために、isConcurrentをNOに設定できます。

0
JeffRegan
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);
0
AllanXing