Szukaj…


Tworzenie timera

Stworzy to czasomierz, aby zadzwonić do doSomething metodę na self w 5.0 sekundy.

[NSTimer scheduledTimerWithTimeInterval:5.0
         target:self 
         selector:@selector(doSomething) 
         userInfo:nil 
         repeats:NO];

Ustawienie parametru repeats na false/NO oznacza, że chcemy, aby timer zadziałał tylko raz. Jeśli ustawimy to na true/YES , uruchomi się co pięć sekund, aż do ręcznego unieważnienia.

Unieważnianie timera

[timer invalidate];
timer = nil;

To zatrzyma uruchamianie timera. Musi zostać wywołany z wątku, w którym utworzono stoper, zobacz uwagi Apple :

Musisz wysłać tę wiadomość z wątku, w którym zegar został zainstalowany. Jeśli wyślesz ten komunikat z innego wątku, źródło wejściowe powiązane z zegarem może nie zostać usunięte z pętli uruchamiania, co może uniemożliwić prawidłowe wyjście z wątku.

Ustawienie wartości nil pomoże Ci sprawdzić, czy działa.

if(timer) {
    [timer invalidate];
    timer = nil;
}

//Now set a timer again.

Ręczne odpalanie timera

[timer fire];

Wywołanie metody fire powoduje, że NSTimer wykonuje zadanie, które zwykle wykonałby zgodnie z harmonogramem.

W przypadku niepowtarzającego się timera spowoduje to automatyczne unieważnienie timera. Oznacza to, że wywołanie fire przed upływem przedziału czasu spowoduje tylko jedno wywołanie.

W przypadku powtarzającego się timera spowoduje to po prostu wywołanie akcji bez przerywania zwykłego harmonogramu.

Przechowywanie informacji w zegarze

Podczas tworzenia timera możesz ustawić parametr userInfo , aby zawierał informacje, które chcesz przekazać do funkcji wywoływanej z timerem.

Przyjmując licznik czasu jako parametr we wspomnianej funkcji, można uzyskać dostęp do właściwości userInfo .

NSDictionary *dictionary = @{
                             @"Message" : @"Hello, world!"
                            }; //this dictionary contains a message
[NSTimer scheduledTimerWithTimeInterval:5.0
     target:self 
     selector:@selector(doSomething) 
     userInfo:dictionary
     repeats:NO]; //the timer contains the dictionary and later calls the function

...

- (void) doSomething:(NSTimer*)timer{
    //the function retrieves the message from the timer
    NSLog("%@", timer.userInfo["Message"]);
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow