2013-05-28 12 views
8

Wszystkie zdarzenia i metody w iOS są przetwarzane za pomocą NSRunLoop: wydarzenia użytkownika, wywołania metod, rotacji liczniki, połączenia itdPerforming selektor na początku/końca pętli biegu

Moje pytanie brzmi:

Jak mogę wykonać selektor w precyzyjnym momencie pętli uruchamiania jako początek i koniec?

Odpowiedz

21

Możesz utworzyć CFRunLoopObserver, który wywoła wejście i wyjście z pętli. Używasz CFRunLoopAddObserver, aby dodać swojego obserwatora do pętli uruchamiania, i CFRunLoopGetMain, aby uzyskać pętlę uruchamiania, do której chcesz dodać.

Tutaj jest raczej bezcelowe przykład stosując te:

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

To po prostu instaluje obserwatora, który rejestruje każde wejście & zjazd do pętli biegu. Możesz uruchomić go jako kompletną aplikację w Xcode i sprawdzić, ile razy przebiega pętla uruchamiania.

Należy pamiętać, że CFRunLoopObserverCreateWithHandler zwraca referencję, którą posiadasz, jeśli usuniesz obserwatora, odpowiadasz za dealokację.

+0

Dzięki, dokładnie tego właśnie szukałem. – vilanovi

Powiązane problemy