Ich finde, dass in einigen Fällen das Ergebnis, dass ich [self doSomething] direkt ausführen, unterscheidet sich von dem ich ausführen in dem Block eines GCD Körpers wie folgt aus:Was ist der Unterschied zwischen einer Methode direkt und im Block von dispatch_async ausführen (dispatch_get_main_queue(),^{})
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething]
})
I zu erfüllen haben [NSThread current] bestätigen es auf dem Haupt-Thread bereits war. Was ist der Unterschied?
Das obige wird es auf den Haupt-Thread "asynchron" beim nächsten Lauf-Zyklus versenden. Durch den Aufruf einer Funktion wird der aktuelle Thread bis zum Abschluss blockiert. – Brandon
Die Absicht, asynchron etwas an die Hauptwarteschlange zu senden, während es bereits im Hauptthread ist, besteht lediglich darin, alles zu beenden, was gerade im Hauptthread läuft. IMHO, es ist oft ein Code-Geruch für ein tieferes Design-Problem. Sie werden dies sehen, wenn sich der Entwickler in der Mitte eines Ereignishandlers befindet und die nächste Aufgabe initiieren möchte, aber es würde Probleme verursachen, wenn es sofort gestartet wird, sodass sie es zurück in die Hauptwarteschlange schicken. Wenn Sie teilen, in welchem Kontext Sie dieses Muster gesehen haben, können wir weiter kommentieren. – Rob