Dlaczego pętla uruchamiania jest potrzebna, gdy używasz narzędzia DispatchQueue.main.async w narzędziu wiersza poleceń Mac w Swift?
Znalazłem dokument firmy Apple, aby zrozumieć, dlaczego powinienem używać pętli uruchamiania do wdrażania zadań w głównej kolejce wysyłkowej.
Według dokumentów Apple ,
Główna kolejka wysyłkowa to globalnie dostępna kolejka szeregowa, która wykonuje zadania w głównym wątku aplikacji. Ta kolejka współpracuje z pętlą uruchamiania aplikacji (jeśli taka istnieje), aby przeplatać wykonywanie zadań w kolejce z wykonywaniem innych źródeł zdarzeń dołączonych do pętli uruchamiania. Ponieważ działa w głównym wątku aplikacji, kolejka główna jest często używana jako punkt synchronizacji kluczy dla aplikacji.
ale nadal nie mogę zrozumieć, „dlaczego” pętla uruchamiania jest potrzebna. brzmi jak „potrzebuje pętli uruchamiania, ponieważ potrzebuje pętli uruchamiania”. Będę bardzo wdzięczny, jeśli ktoś mi to wyjaśni. Dziękuję Ci.
Odpowiedzi
dlaczego powinienem używać pętli uruchamiania do realizacji zadań w głównej kolejce wysyłkowej
Zwykle tego nie robisz, ponieważ już go używasz!
W projekcie aplikacji istnieje już pętla uruchamiania kolejki głównej . Na przykład projekt aplikacji na iOS to nic innego jak jedno gigantyczne wywołanie UIApplicationMain, które zapewnia pętlę uruchamiania.
W ten sposób może tam siedzieć i czekać, aż użytkownik coś zrobi. Pętla to bieganie. I zapętlenie.
Ale na przykład w narzędziu wiersza poleceń systemu Mac nie ma automatycznej pętli uruchamiania. Uruchamia swoją główną funkcję i natychmiast kończy pracę. Gdybyś tego nie potrzebował, dostarczyłbyś pętlę uruchamiania.
DispatchQueue.main.async
jest wtedy, gdy masz kod działający w kolejce w tle i potrzebujesz określonego bloku kodu do wykonania w głównej kolejce.W twoim kodzie
viewDidLoad
jest już uruchomiony w głównej kolejce, więc nie ma powodu, aby używać DispatchQueue.main.async.Ale używanie go niekoniecznie jest złe. Ale zmienia kolejność wykonywania.
zamknięcie async jest umieszczane w kolejce do uruchomienia po zakończeniu bieżącego runloop.
nie rozumiem „dlaczego” pętla uruchamiania jest potrzebna
Ogólnie rzecz biorąc, pętla uruchamiania nie jest wymagana w przypadku aplikacji wiersza poleceń. Możesz użyć pętli uruchamiania, jeśli masz specjalne potrzeby (np. Masz dynamiczny interfejs użytkownika, który wykonuje niektóre zadania podczas oczekiwania na dane wejściowe użytkownika), ale zdecydowana większość aplikacji wiersza poleceń nie wymaga pętli uruchamiania.
Jak mówią doktorzy :
Pętla uruchamiania to pętla przetwarzania zdarzeń używana do planowania pracy i koordynowania odbioru nadchodzących zdarzeń. Celem pętli uruchamiania jest zajęcie wątku, gdy jest dużo pracy do wykonania i uśpienie wątku, gdy go nie ma.
Tak więc, jeśli chcesz, aby aplikacja czekała na nadchodzące zdarzenia lub asynchronicznie wysyłasz zadania między kolejkami, dobrze, zastosuj pętle uruchamiania, ale w przeciwnym razie nie przejmuj się. Większość aplikacji wiersza poleceń w ogóle nie musi używać pętli uruchamiania.