2013-08-01 6 views
19

An vielen Orten in meiner app ich den nächsten Code verwenden Hintergrundaufgaben auszuführen und den Haupt-Thread mitteilen:erstellen Sie eine benutzerdefinierte sequenzielle globale Absende-Warteschlange

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

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

Ist es möglich, eine backgroundQueue an einem Ort zu schaffen (wo geht es am besten?) und später benutzen? Ich weiß über die globale Warteschlange des Systems, aber die Bestellung ist wichtig für mich.

Antwort

34

So etwas sollte funktionieren:

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

könnten Sie bitte ein Anwendungsbeispiel hinzufügen? – pvllnspk

+0

Sicher: dispatch_async (backgroundQueue(),^{NSLog (@ "An der Hintergrundwarteschlange!"}); –

+0

kann Ihren Code in der Antwort nicht kompilieren – pvllnspk

0

Sie könnten auch eine NSOperationQueue uns und Push-Operationen zu. Um sicherzustellen, dass die Operationen nicht außer Betrieb sind, können Sie isConcurrent auf NO setzen.

+0

ist es nicht mein Fall – pvllnspk

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

       dispatch_async(dispatch_get_main_queue(), ^{ 
        // main thread 
         }); 
       }); 
0
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 

Vorstehende ist Serial-Queue, wenn Sie gleichzeitig Warteschlange erstellen möchten, können Sie DISPATCH_QUEUE_CONCURRENT verwenden können.

In iOS 5 und höher können Sie selbst Dispatchwarteschlangen erstellen, indem Sie DISPATCH_QUEUE_CONCURRENT als Warteschlangentyp angeben.

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