2012-10-28 1 views
1

Parfois Cocoa permet à un utilisateur de passer soit NSOperationQueue ou dispath_queue_t la méthode async:Quelle signature dois-je utiliser pour la méthode asynchrone?

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 
-[AVPlayer addBoundaryTimeObserverForTimes:queue:usingBlock:] 
-[NSNotificationCenter addObserverForName:object:queue:usingBlock:] 

ne Parfois pas:

-[NSDocument continueActivityUsingBlock:] 
-[NSSavePanel beginWithCompletionHandler:] 
-[GKAchievementDescription loadImageWithCompletionHandler:] 

Pour moi, passer une file d'attente à la méthode semble ambiguë, parce que vous pouvez toujours attraper la file d'attente souhaitée lorsque vous créez un bloc. .: par exemple

NSOperationQueue *q = …; 
[aDocument continueActivityUsingBlock:^{ 
    [q addOperationWithBlock:^{ 
     // Do actual work here. 
    }]; 
}]; 

Peut-être que je manque quelque chose et passant des files d'attente est logique?

Répondre

4

Dépend.

Avez-vous besoin d'un rappel à la fin?

Si tel est le cas, peut avoir besoin de spécifier une file d'attente. Le type - NSOperationQueue vs GCD queue - est à vous.

Cependant, si vous définissez votre rappel comme étant soit toujours être invoqué sur la file d'attente principale (ce qui serait approprié pour un rappel qui est toujours va mettre à jour l'interface utilisateur extensive) ou est toujours va être appelé de manière asynchrone (c'est-à-dire que le rappel est distribué sur une file d'attente asynchrone, en général), il n'y a pas de raison de passer la file d'attente ciblée. Si votre callback est celui où il est prévu qu'il interagira potentiellement avec des données dont la manipulation doit être sérialisée, définir une API qui fournit une primitive de sérialisation - une file d'attente - peut être un raccourci puissant.

+0

Merci. Je vois maintenant clairement, que les méthodes qui nécessitent une file d'attente conçue pour exécuter passé bloc dans l'ordre. – Kentzo

Questions connexes