it-swarm.com.de

iOS - Stellen Sie die Ausführung auf dem Hauptthread sicher

Ich möchte wissen, wie ich mein function im Haupt-Thread aufrufen kann.

Wie stelle ich sicher, dass mein function im Haupt-Thread aufgerufen wird?

(dies folgt auf eine vorherige Frage von mir).

71
user236739

gibt es eine Regel, nach der ich sicherstellen kann, dass meine App meinen eigenen Code nur im Hauptthread ausführt?

Normalerweise müssen Sie nichts tun, um dies sicherzustellen - Ihre Liste der Dinge reicht normalerweise aus. Sofern Sie nicht mit einer API interagieren, die zufällig einen Thread erzeugt und Ihren Code im Hintergrund ausführt, werden Sie auf dem Haupt-Thread ausgeführt.

Wenn Sie wirklich sicher sein wollen, können Sie Dinge tun wie

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

eine Methode auf dem Hauptthread ausführen. (Es gibt auch ein GCD-Äquivalent.)

46
Amy Worrall

Dies wird es tun:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

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

}];

Hoffe das hilft!

161
shoughton123

Bei Verwendung von iOS> = 4

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

ich finde das cool, auch wenn es im Allgemeinen eine gute Form ist, dem Aufrufer eine Methode zu überlassen, die dafür verantwortlich ist, dass er den richtigen Thread aufruft.

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