Welche Bedeutung hat WaitUntilDOne in performSelectorOnMainThread?

8

Was ist die Bedeutung von WaitUntilDOne in performSelectorOnMainThread ?

Wie kann YES oder NO auf WaitUntilDone in der App gesetzt werden?

UPDATE:

Meine Frage hätte sein sollen: In welchen Szenarien machen sie einen Unterschied?

Sergios Antwort war diejenige, die ich erwartet hatte.

    
Krishnan 20.01.2012, 15:26
quelle

4 Antworten

12

Von Apple-Dokumentation zu waitUntilDone :

  

Ein boolescher Wert, der angibt, ob der aktuelle Thread blockiert, bis der angegebene Selektor am Empfänger im Haupt-Thread ausgeführt wird. Geben Sie YES an, um diesen Thread zu blockieren. Andernfalls geben Sie NO an, damit diese Methode sofort zurückgegeben wird.   Wenn der aktuelle Thread auch der Hauptthread ist und Sie YES für diesen Parameter angeben, wird die Nachricht sofort übermittelt und verarbeitet.

Sie müssen sich darauf konzentrieren, welcher Thread performSelectorOnMainThread ausführt. Dieser Thread blockiert und wartet, bis der Haupt-Thread diesen Selektor abgeschlossen hat. B., dass ein Worker-Thread eine Nachricht an den Haupt-Thread senden muss (z. B. um einige Informationen an einen zentralen Speicher zu speichern, der nicht Thread-sicher ist). Der Worker möchte möglicherweise blockieren und warten, bis der Vorgang abgeschlossen ist, bevor ein anderer Vorgang der gleichen Art ausgeführt wird. Daher ist waitUntilDone in einem solchen Fall nützlich.

    
sergio 20.01.2012, 15:37
quelle
9

Wenn Sie NO angeben, blockiert performSelectorOnMainThread nicht und führt die nächste Codezeile unmittelbar nach dem performSelectorOnMainThread aus, ohne darauf zu warten, dass der Hauptthread den Selektor ausführt.

Wenn Sie YES sagen, blockiert der Thread, von dem aus Sie performSelectorOnMainThread aufgerufen haben, die Ausführung in dieser Zeile, bis der Haupt-Thread den Selektor ausgeführt hat. Dann wird er fortgesetzt.

    
Nick Lockwood 20.01.2012 15:30
quelle
1

YES bedeutet, dass der aktuelle Thread blockiert / wartet, bis der Selektor ausgeführt wird, NO, damit performSelectorOnMainThread:withObject:waitUntilDone: sofort zurückgibt

    
X Slash 20.01.2012 15:31
quelle
1

Im Allgemeinen möchten Sie verhindern, dass die Ausführung des aktuellen Threads mit YES blockiert wird.

Wenn NO , wird die Nachricht zur Liste der auszuführenden Aufgaben des Hauptthreads hinzugefügt, die ausgeführt werden soll, wenn die Ausführungsschleife wieder aufgenommen wird - das könnte bald und praktisch sofort / gleichzeitig geschehen.

    
justin 20.01.2012 15:39
quelle

Tags und Links