Einer der zentralen Grundsätze der Architektur meiner neuesten App ist, dass ich Methoden auf dem App-Modell aufrufen werde, das async ist und Fehler- und Erfolgsszenarioblöcke akzeptiert.
Das heißt, die Benutzeroberfläche ruft die Modellmethode mit zwei Blöcken auf, einen für den Erfolg und einen für den Fehler.
Das ist großartig, weil der Kontext des ursprünglichen Aufrufs beibehalten wird, der Block selbst jedoch im Hintergrundthread aufgerufen wird. Gibt es überhaupt eine Blockierung des Hauptthreads?
Hoffentlich habe ich es in Ordnung erklärt, wenn nicht, im Grunde sind meine Modellmethoden async, kehren Sie sofort zurück und erstellen Sie einen neuen Thread, auf dem die Operation ausgeführt wird. Sobald das Op zurückkommt, werde ich einen Block aufrufen, der die zurückgegebenen Daten nachbearbeitet, DANN muss ich den Block für das Erfolgsszenario aufrufen, das durch den Aufruf innerhalb der UI definiert wurde. Die in der UI definierten Erfolgs- und Fehlerszenario-Blöcke sollten jedoch im Hauptthread aufgerufen werden, da ich mit UI-Elementen interagieren muss, was nur für den Hauptthread möglich sein sollte.
vielen Dank
Wenn Sie GCD verwenden, können Sie die "get main queue" verwenden:
%Vor%Rufen Sie dies in einem asynchronen Versand auf. d. h.
%Vor%Der obige Beispielblock könnte in einer asynchronen Hintergrundwarteschlange ausgeführt werden und der Beispielcode würde die UI-Arbeit an den Hauptthread senden.
NSObject hat eine Methode:
%Vor%Erstellen Sie eine Methode, die einen NSDictionary-Parameter in einer praktischen Klasse verwendet, die immer vorhanden ist (wie Ihr Anwendungsdelegat oder ein Singleton-Objekt), den Block und seine Parameter in ein NSDictionary oder NSArray zusammenfasst und
%Vor%Tags und Links objective-c iphone ipad