2012-10-29 16 views
8

Nie korzystałem z GCD ani z wielu wątków w moich aplikacjach, ale natknąłem się na sytuację, w której muszę uruchomić metodę lub dwa z innego wątku. Po zakończeniu tej metody muszę wywołać inną metodę, używając głównego wątku z wywołania zwrotnego. Szukałem w pobliżu, aby zobaczyć, jak wykryć, kiedy wątek zakończył operację, ale nadal nie jest zbyt jasne w tej sprawie.IOS Grand Central Dispatch z metodą oddzwaniania

Stworzyłem aplikację testową i właśnie skorzystałem z metody viewDidLoad dla szybkiego przykładu.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     NSLog(@"viewDidLoad called"); 
     sleep(5); // simulating a thread being tied up for 5 seconds 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self callbackMethod]; // method called after above thread has completed running 
     }); 

    }); 


} 

Czy ten przykład będzie działał dla tego, co próbuję zrobić? Podczas uruchamiania aplikacji wydaje się, że metoda wywołania zwrotnego jest wywoływana po zakończeniu trybu uśpienia (5). Czy to właściwy sposób radzenia sobie z tą sytuacją, czy też jestem daleko?

+2

Tak, to wygląda na to, że powinno działać poprawnie. – geraldWilliam

+0

Dziękujemy za szybkie odpowiedzi! @ Dzięki za dodatkowe linki. Bardzo doceniane! – tg2007

Odpowiedz

6

Jesteś na miejscu; to standardowy wzorzec do wysiadania i do głównego wątku. Zobacz moją odpowiedź tutaj: https://stackoverflow.com/a/13080519/341994

i na przykład kodu z mojej książki, zorganizowany w ten właśnie sposób:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch25p868mandelbrotGCD/ch38p1106mandelbrotNoThreading/MyMandelbrotView.swift

w tym przykładzie, przyjrzeć się, jak drawThatPuppy wysiada główny wątek do zrobienia czas -konsumowanie obliczeń, a następnie powrót do głównego wątku, aby wykonać rysunek w interfejsie.

Powiązane problemy