2013-05-28 7 views
8

Tutti gli eventi e metodi in IOS sono trattati con NSRunLoop: eventi utente, chiamate di metodo, rotazioni, temporizzatori, connessioni, eccEsecuzione selettore all'inizio/fine del ciclo corsa

mia domanda è:

Come posso eseguire un selettore in un momento preciso del ciclo di esecuzione come inizio e fine?

risposta

21

È possibile creare un CFRunLoopObserver che richiamerà un blocco all'entrata e all'uscita del ciclo. Si utilizza CFRunLoopAddObserver per aggiungere l'osservatore al ciclo di esecuzione e CFRunLoopGetMain per ottenere il ciclo di esecuzione da aggiungere a.

Ecco un esempio piuttosto inutile l'utilizzo di questi:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(NULL, (kCFRunLoopEntry | kCFRunLoopExit), YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) 
    { 
     static unsigned long count = 0; 
     NSLog(@"activity %lu: %@", ++count, (activity & kCFRunLoopEntry ? @"Enter" : @"Exit")); 
    }); 
    CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes); 
} 

Questo installa semplicemente un osservatore che registra ogni voce di & uscita sul circuito di corsa. Puoi eseguirlo come applicazione completa in Xcode e vedere quante volte il ciclo di esecuzione va in giro.

Nota che CFRunLoopObserverCreateWithHandler restituisce un riferimento di tua proprietà, se rimuovi l'osservatore sei responsabile della deallocazione.

+0

Grazie, è esattamente quello che stavo cercando. – vilanovi