È 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.
Grazie, è esattamente quello che stavo cercando. – vilanovi