web-dev-qa-db-fra.com

Comment puis-je remplacer la méthode obsolète dispatch_get_current_queue ()?

Je développe une application de chat en utilisant xmppframework dans iOS 5; cela fonctionne parfaitement.

Mais j'ai mis à jour mon Xcode à 4.5.1, iOS 5 à iOS 6 et mon Mac OS à 10.7.5, et le projet n'a pas fonctionné en raison de problèmes de dépréciation. J'ai remplacé toutes les méthodes par de nouvelles méthodes dans iOS 6 sauf celle-ci:

dispatch_get_current_queue()  

Comment puis-je remplacer cette méthode dans iOS 6?

38
venkat

Cela dépend de ce que vous devez réaliser avec cet appel.
Apple indique qu'il devrait être utilisé de toute façon pour le débogage.

Peut-être que la file d'attente n'a pas d'importance (car vous avez juste besoin d'une file d'attente en arrière-plan), alors obtenez une file d'attente globale avec une priorité spécifique (dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);)

OU,

Si vous devez exécuter certains morceaux de code dans la même file d'attente, créez une file d'attente, conservez-la et répartissez toutes vos tâches là-bas.

4
Nir Golan

Que diriez-vous d'utiliser NSOperationQueue?

-(void) doSomeThing:(void (^)(BOOL success)) completionHandler
{
    NSOperationQueue* callbackQueue = [NSOperationQueue currentQueue];
    if(!callbackQueue) {
        callbackQueue = [NSOperationQueue mainQueue];
    }
    dispatch_async(...,^{
         // do heavyweight stuff here
         // then call completionHandler
         if(completionHandler) {
             [callbackQueue addOperationWithBlock:^{
                 completionHandler(...);
             }];
         }
    });
2
adib