Je trouve que dans certains cas, le résultat que j'effectue [self doSomething] directement est différent de celui que j'effectue dans le bloc d'un corps GCD comme ceci:Quelle est la différence entre effectuer une méthode directement et dans le bloc de dispatch_async (dispatch_get_main_queue(),^{})
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething]
})
j'effectuer [NSThread currentThread] pour confirmer qu'il a déjà été sur le thread principal. Alors, quelle est la difference?
Ce qui précède l'enverra sur le thread principal «asynchonously» sur le prochain cycle d'exécution. L'appel d'une fonction bloquera le thread en cours jusqu'à la fin. – Brandon
L'intention de distribuer de façon asynchrone quelque chose dans la file d'attente principale alors qu'il est déjà sur le thread principal consiste simplement à laisser finir tout ce qui est en cours d'exécution sur le thread principal. À mon humble avis, il est souvent une odeur de code pour un problème de conception plus profonde. Vous verrez ceci lorsque le développeur se trouve au milieu d'un gestionnaire d'événements et veut lancer la tâche suivante, mais cela causerait des problèmes s'il le démarrait immédiatement, alors ils le renvoyeront dans la file d'attente principale. Si vous partagez dans quel contexte vous avez vu ce modèle, nous pouvons commenter davantage. – Rob