Załóżmy Wzywam dispatch_async()
trzy razy w kolejności:Czy główna kolejka Grand Central Dispatch jest seryjna czy współbieżna?
dispatch_async(dispatch_get_main_queue(),
^{
[self doOne];
});
// some code here
dispatch_async(dispatch_get_main_queue(),
^{
[self doTwo];
});
// more code here
dispatch_async(dispatch_get_main_queue(),
^{
[self doThree];
});
Będzie to zawsze być wykonywane jak
[self doOne]
, [self doTwo]
, następnie [self doThree]
lub jest zamówienie jest gwarantowany?
W tym przypadku pytanie prawdopodobnie jest takie, że główna kolejka jest ciągła lub równoległa.
Ponadto musi być szeregowy, ponieważ bloki działają na tym samym wątku. Nie ma możliwości, aby pojedynczy wątek mógł jednocześnie współdziałać z wieloma blokami. – Sven
@Rob Tak, ale bloki przesłane do głównej kolejki zostaną wykonane w głównym wątku. To jest cały punkt głównej kolejki. Kolejki nie uruchamiają bloków, co zawsze dzieje się w pewnym wątku. Zazwyczaj wątek prywatny zarządzany przez GCD, ale główny wątek głównej kolejki. – Sven
@Sven You źle mnie zrozumiałeś. Chodzi mi tylko o wyjaśnienie, że tak jest w przypadku głównej kolejki, która nie dotyczy ogólnie kolejek. – Rob