Odziedziczyłem kod, który ma dość nietypową sekwencję zagnieżdżoną. Zwykły paradygmat będzie miał pojedynczą dyspozycję do głównej kolejki, aby zaktualizować interfejs użytkownika. Przedstawiony poniżej kod umieszcza wysyłkę do głównej kolejki w ramach innej wysyłki do głównej kolejki.Jaki jest cel zagnieżdżania dispatch_async (dispatch_get_main_queue()^{})?
- (void)viewDidLoad
{
// Setup some data
// Adjust UI
dispatch_async(myBackgroundQueue, ^{
while(Do_some_time_consuming_work) {
// Time consuming work goes here
if (things_are_going_slowly) {
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
stillWorkingLabel.hidden = NO; //Let user know the work is still ongoing
});
});
)
// Finish time-consuming work
}
});
}
Jaki jest cel zagnieżdżania dispatch_async(dispatch_get_main_queue()
? Ta sekwencja zagnieżdżona pojawia się w kilku miejscach w aplikacji. Wydaje mi się, że potrzebna jest tylko jedna przesyłka do głównej kolejki.
Myślę, że przeczytałem wszystkie istotne pytania dotyczące pokrewnych tematów tutaj i przez wyszukiwarkę Google, ale nie znalazłem nikogo sugerującego zagnieżdżenie dwóch identycznych wysyłek.
Aplikacja działa dobrze, a interfejs użytkownika aktualizuje się zgodnie z oczekiwaniami w powyższym przykładzie oraz w innych miejscach kodu.
Większość kodu aplikacji używa zwykłej, nie zagnieżdżonej wersji powyższego schematu, i oczywiście działa dobrze.
Jestem skłonny po prostu zastąpić te połączenia zagnieżdżone pojedynczą wysyłką, ale być może czegoś tutaj brakuje. Każda rada byłaby doceniona.