2013-05-28 27 views
8

Alle Ereignisse und Methoden in iOS verarbeitet mit NSRunLoop: Benutzerereignisse, Methodenaufrufe, Rotationen, Timer, Anschlüsse etc.Performing Wähler am Anfang/Ende der Laufschleife

Meine Frage ist:

Wie kann ich einen Selektor in einem bestimmten Moment der Laufschleife als Anfang und Ende ausführen?

Antwort

21

Sie können eine CFRunLoopObserver erstellen, die einen Block bei der Eingabe und dem Verlassen von Schleifen aufruft. Verwenden Sie CFRunLoopAddObserver, um den Beobachter der Laufschleife hinzuzufügen, und CFRunLoopGetMain, um die zu addierende Laufschleife zu erhalten.

ist hier ein ziemlich sinnlos Beispiel diese mit:

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

Dieses einfach installiert einen Beobachter, die jeden Eintrag & Ausgang zur Laufschleife protokolliert. Sie können es als eine vollständige Anwendung in Xcode ausführen und sehen, wie oft die Laufschleife herum läuft.

Beachten Sie, dass CFRunLoopObserverCreateWithHandler eine Referenz zurückgibt, die Sie besitzen. Wenn Sie den Beobachter entfernen, sind Sie für die Aufhebung der Zuordnung verantwortlich.

+0

Danke, es ist genau das, was ich gesucht habe. – vilanovi