J'ai une méthode qui fait des changements d'interface dans certains cas.
Par exemple:
-(void) myMethod {
if(someExpressionIsTrue) {
// make some UI changes
// ...
// show actionSheet for example
}
}
Parfois, myMethod
est appelé depuis mainThread
parfois depuis certains other thread
.
C'est pourquoi je veux que ces changements d'interface utilisateur soient effectués dans le mainThread
.
J'ai changé la partie nécessaire de myMethod
de cette façon:
if(someExpressionIsTrue) {
dispatch_async(dispatch_get_main_queue(), ^{
// make some UI changes
// ...
// show actionSheet for example
});
}
Donc les questions:
dispatch_async(dispatch_get_main_queue()
dans le thread principal? Influe-t-il sur les performances?[NSThread isMainThread]
Et appeler dispatch_async
Uniquement en cas de autre thread, mais cela me fera créer une méthode ou un bloc de plus avec ces mises à jour de l'interface utilisateur.Il n'y a pas de problème avec l'ajout d'un bloc asynchrone sur la file d'attente principale depuis la file d'attente principale, il ne fait qu'exécuter la méthode plus tard dans la boucle d'exécution.
Ce que vous ne voulez certainement pas faire, c'est d'appeler dispatch_sync
en ajoutant un bloc à la file d'attente principale depuis la file d'attente principale car vous finirez par vous verrouiller.
Ne vous inquiétez pas si vous appelez dispatch_async dans le thread principal ou non. iOS mettra le bloc dans une file d'attente et exécutera le bloc dans le thread principal.