2012-01-20 3 views

Odpowiedz

12

Od Apple docs about waitUntilDone:

logiczna, która określa, czy obecne bloki gwintowania dopiero po określony selektor jest wykonywany na odbiorniku na głównym wątku. Podaj YES, aby zablokować ten wątek; w przeciwnym razie określ NIE, aby ta metoda natychmiast powróciła. Jeśli bieżący wątek jest również wątkiem głównym, a dla tego parametru określono wartość TAK, komunikat jest dostarczany i przetwarzany natychmiast.

Musisz skupić się na tym, który wątek wykonuje performSelectorOnMainThread. Ten wątek będzie blokował i czekał, aż główny wątek zakończy ten selektor; powiedzmy na przykład, że wątek roboczy wymaga wysłania wiadomości do głównego wątku (np. do przechowywania pewnych informacji w jakimś centralnym magazynie, który nie jest bezpieczny dla wątków). Pracownik może chcieć zablokować i poczekać, aż operacja zostanie zakończona przed wydaniem kolejnej operacji tego samego rodzaju. Tak więc, przydaje się w takim przypadku waitUntilDone.

+0

Dzięki za wyjaśnienie .. – Krishnan

9

Jeśli powiemy, że , performSelectorOnMainThread nie blokuje i natychmiast wykona następny wiersz kodu po performSelectorOnMainThread bez czekania, aż główny wątek wykona twój selektor.

Jeśli powiemy YES, wątek, z którego wywołano performSelectorOnMainThread, zablokuje wykonanie tej linii, dopóki główny wątek nie wykona selektora, a następnie będzie kontynuowany.

1

TAK oznacza obecne bloki Temat/czeka aż selektor jest wykonywana, NO mieć performSelectorOnMainThread:withObject:waitUntilDone: natychmiast powraca

0

Zasadniczo nie należy blokować wykonywania bieżącego wątku za pomocą YES.

Jeśli zostanie dodana NO, wiadomość zostanie dodana do pętli uruchamiania głównego wątku, aby wykonać listę, która ma zostać wykonana po wznowieniu pętli uruchamiania, która może nastąpić szybko i praktycznie natychmiastowo/współbieżnie.