Rufen Sie die Modellmethode mit dem Block auf, der im Hauptthread ausgeführt wird

8

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

    
krisdyson 09.02.2011, 11:41
quelle

4 Antworten

36

So etwas ist wahrscheinlich das, wonach Sie suchen:

%Vor%     
Jim Dovey 09.02.2011, 19:26
quelle
10

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.

    
Robotic Cat 09.02.2011 12:54
quelle
6

Ähnliches funktioniert auch mit NSOperationQueue :

%Vor%     
Guruniverse 06.09.2011 20:18
quelle
5

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%     
Bogatyr 09.02.2011 12:50
quelle

Tags und Links