[self performSelectorOnMainThread:@selector(doStuff:)
withObject:myObject
waitUntilDone:YES];
Ceci permet de s'assurer que le sélecteur est exécuté sur le thread principal en l'ajoutant à la boucle de fonctionnement principale. Lorsque vous définissez waitUntilDone:YES
, vous laissez votre thread en cours d'inactivité tant que la boucle d'exécution principale doit exécuter le sélecteur. Dans un environnement à un seul thread, cela laissera le runloop s'exécuter juste après que vous l'ayez appelé, dans un environnement multithread, le runloop principal effectuera le sélecteur une fois qu'il fait l'étape suivante.
Vous avez dans l'un des cas, les deux une petite tête que le sélecteur n'est pas effectuée juste après avoir appelé la fonction, mais à un moment plus tard, alors [self doStuff:myObject];
effectue le sélecteur immédiatement
merci !! J'étais gentil soupçonnant cela! – SpaceDog
Excusez-moi les gars, mais ce n'était pas si précis. Si vous appelez cela du thread principal, la méthode sera exécutée immédiatement parce que le paramètre 'waitUntilDone: YES'. Le message ignorera la boucle d'exécution et il est important de mentionner que la boucle d'exécution ne fonctionnera jamais dans cette condition car la boucle d'exécution principale fera beaucoup de choses, y compris drainer autorelease pool et exécuter des messages en attente, ce qui pourrait affecter la gestion de la mémoire le code. – tia
Salut, merci pour l'info. Je ne savais pas ça! – JustSid