2012-10-29 12 views
8

Non ho usato GCD o molto threading nelle mie app, ma mi sono imbattuto in una situazione in cui ho bisogno di eseguire un metodo o due su un altro thread. Una volta completato questo metodo, devo chiamare un altro metodo usando il thread principale da un callback. Ho cercato in giro per vedere come rilevare quando un thread ha terminato l'operazione, ma non è ancora chiaro sull'argomento.IOS Grand Central Dispatch con metodo di callback

Ho creato un'applicazione di test e ho appena utilizzato il metodo viewDidLoad per un rapido esempio.

- (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 
     }); 

    }); 


} 

Questo esempio funziona per quello che sto cercando di fare? Quando si esegue l'applicazione, sembra che il metodo di callback venga chiamato al termine di sleep (5). È questo il modo corretto di gestire questa situazione o sono fuori strada?

+2

Sì, sembra che dovrebbe funzionare bene. – geraldWilliam

+0

Ragazzi grazie per le risposte veloci! @matt grazie anche per i collegamenti aggiuntivi. Molto apprezzato! – tg2007

risposta

6

Sei perfetto; questo è lo schema standard per scendere e sul filo principale. Vedere la mia risposta qui: https://stackoverflow.com/a/13080519/341994

E per esempio di codice dal mio libro, strutturato in questo modo:

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

In questo esempio, guardate come drawThatPuppy scende dal thread principale per fare il tempo -incorporare i calcoli e quindi tornare sul thread principale per fare il disegno nell'interfaccia.

Problemi correlati