2013-08-01 11 views
19

In molti luoghi in mio app che uso il codice successivo per eseguire le attività in background e notifica al thread principale:creare una coda di invio globale sequenziale personalizzato

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

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

E 'possibile creare un backgroundQueue in un unico luogo (dove fa il modo migliore?) e usarlo dopo? Conosco la coda globale del sistema, ma per me l'ordine è importante.

risposta

34

Qualcosa del genere dovrebbe funzionare bene:

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

potresti aggiungere un esempio di utilizzo? – pvllnspk

+0

Sicuro: dispatch_async (backgroundQueue(),^{NSLog (@ "Accodato nella coda di sfondo!"}); –

+0

non può compilare il codice nella risposta – pvllnspk

0

Si potrebbe anche noi un NSOperationQueue e spingere le operazioni ad esso. Per assicurarsi che le operazioni non siano esaurite, è possibile impostare isConcurrent su NO.

+0

non è il mio caso – 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); 

precedente è coda di serie, se si desidera creare code concorrente, è possibile utilizzare DISPATCH_QUEUE_CONCURRENT.

In iOS 5 e versioni successive, è possibile creare autonomamente le code di invio specificando DISPATCH_QUEUE_CONCURRENT come tipo di coda.

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