J'ai utilisé avec succès Grand Central Dispatch dans mes applications, mais je me demandais quel était le réel avantage d'utiliser quelque chose comme ça :
dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff
ou même
dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff
Je veux dire que dans les deux cas, vous déclenchez un bloc qui doit être exécuté sur le thread principal, exactement là où l'application s'exécute, et cela n'aidera pas à réduire la charge. Dans le premier cas, vous n'avez aucun contrôle sur le moment où le bloc sera exécuté. J'ai vu des cas où des blocs étaient exécutés une demi-seconde après que vous les ayez lancés. Dans le second cas, c'est similaire à
[self doStuff];
n'est-ce pas ?
Je me demande ce que vous en pensez.
9 votes
Au fait, lancer une file d'attente principale dans un dispatch_sync entraînera un blocage.
5 votes
Je viens de le lire dans la docs : "Contrairement à dispatch_async, [dispatch_sync] ne revient pas avant la fin du bloc. L'appel de cette fonction et le ciblage de la file d'attente actuelle entraînent un blocage"... Mais peut-être que je lis cela mal... (la file d'attente actuelle ne signifie pas le thread principal). Veuillez corriger si je me trompe.
4 votes
@BrooksHanes pas toujours vrai. Il en résultera une impasse si vous êtes déjà sur le fil principal. Sinon, il n'y aurait pas d'impasse. Voir aquí