Powiel możliwe:
NSTimer doesn't stopJak zatrzymać zdarzenie NStimer?
W mojej aplikacji używam NStimer do wywołania funkcji Animacja co 3 sekundy. Chcę zatrzymać ten timer i zadzwoniłem do innego zdarzenia, gdy timer nadal działa. czy to możliwe?
Powiel możliwe:
NSTimer doesn't stopJak zatrzymać zdarzenie NStimer?
W mojej aplikacji używam NStimer do wywołania funkcji Animacja co 3 sekundy. Chcę zatrzymać ten timer i zadzwoniłem do innego zdarzenia, gdy timer nadal działa. czy to możliwe?
Najpierw chcesz zachować wskaźnik timera
self.packetTimer = [NSTimer timerWithTimeInterval:CONNECTION_TIMEOUT target:self selector:@selector(connectionTimeout:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:packetTimer forMode:NSDefaultRunLoopMode];
Jeśli gdzieś w kodzie chcesz ją anulować, wystarczy zadzwonić:
[self.packetTimer invalidate];
self.packetTimer = nil;
@interface
NSTimer *autoTimer;
@implementation
// Start timer
autoTimer = [NSTimer scheduledTimerWithTimeInterval:(3.0)
target:self
selector:@selector(autoTimerFired:)
userInfo:nil
repeats:YES];
// Stop timer:
[autoTimer invalidate];
autoTimer = nil;
Gdyby nie ty zwolnić timer przed ustawieniem go na zero? "unieważnij" spowoduje, że pętla uruchamiająca zwolni jego odwołanie, ale istnieje dodatkowe zachowanie, gdy jest przypisane do 'packetTimer'. –
To prawda. Poprawiono – coneybeare
Hmm. To nie wygląda mi na poprawione. Sebatsien ma rację - jeśli przypiszesz timer do self.packetTimer (zakładając, że jest to właściwość retain), to jest zatrzymanie. Dodanie go do runloop jest drugim zachowaniem. Jeśli później go unieważnisz, pojawi się wewnętrznie. Myślę, że potrzebujesz jawnego [self.packetTimer release} zaraz po unieważnieniu i tuż przed ustawieniem self.packetTimer na zero. Czy się mylę? – Marc