web-dev-qa-db-fra.com

iOS - Assurer l'exécution sur le thread principal

Je veux savoir comment appeler mon function sur le fil principal .

Comment puis-je m'assurer que mon function est appelé sur le fil principal ?

(cela fait suite à une précédente question de la mienne)

71
user236739

y a-t-il une règle que je peux suivre pour m'assurer que mon application exécute mon propre code juste dans le fil principal?

En règle générale, vous n'avez rien à faire pour vous en assurer - votre liste de choses est généralement suffisante. Sauf si vous interagissez avec une API qui génère un thread et exécute votre code en arrière-plan, vous exécuterez le thread principal.

Si vous voulez être vraiment sûr, vous pouvez faire des choses comme

[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];

exécuter une méthode sur le thread principal. (Il y a aussi un équivalent GCD.)

46
Amy Worrall

Cela va le faire:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

   //Your code goes in here
   NSLog(@"Main Thread Code");

}];

J'espère que cela t'aides!

161
shoughton123

Lorsque vous utilisez iOS> = 4

dispatch_async(dispatch_get_main_queue(), ^{
  //Your main thread code goes in here
  NSLog(@"Im on the main thread");       
});
132
CarlJ

je pense que c'est cool, même si en général sa forme permet de laisser l'appelant d'une méthode chargée de s'assurer qu'il est appelé sur le bon fil.

if (![[NSThread currentThread] isMainThread]) {
    [self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
    return;
}
10
Sean Danzeiser