Jeśli chcesz być w stanie anulować timer, trzeba odwołać się do timer, który anulujesz, a to oznacza, że musisz trzymać wskaźnik na czasomierzu, zobacz odpowiedź Justina.
Utrzymywanie odniesienia do licznika czasu jest właściwym sposobem, ale w celu uzyskania kompletności możesz również użyć metody -performSelector:withObject:afterDelay:
jako zegara czasu dla biedaka. To połączenie może zostać unieważnione za pomocą +cancelPreviousPerformRequestsWithTarget:
. Przykładowy kod:
- (void) viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(timerTick) withObject:nil afterDelay:10];
}
A potem:
- (void) viewWillDisappear
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[super viewWillDisappear];
}
Ale to nie jest właściwy sposób, aby to zrobić, ponieważ mogą istnieć inne wnioski wykonać selektor oczekujące na obiekt, który chcesz skasować. Najlepiej utrzymywać timer, dzięki czemu wiesz dokładnie, co anulujesz.
Nawiasem mówiąc, to także zły pomysł na uruchomienie timera w -viewDidLoad
. Widok ładowanie może się zdarzyć w dowolnym momencie, bez żadnego związku z wyświetlaniem widoku.
Co masz na myśli przez * Nie chcę tworzyć obiektu NSTimer *? Już utworzyłeś jeden używając 'scheduledTimerWithTimeInterval'. – sch
Chodzi mi o to, że nie trzymam timera, który tworzę. Czy to możliwe? – Voloda2