NSTimer не останавливается - PullRequest
22 голосов
/ 23 июня 2009

У меня есть таймер, который срабатывает при вызове метода viewWillAppear и становится недействительным при вызове метода viewDidDisappear. Но после определенного количества переключений между представлениями таймер продолжает срабатывать даже после того, как он был отменен. В чем проблема?

Вот мой код:

NSTimer *timer;

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    timer = [NSTimer scheduledTimerWithTimeInterval: 0.2f
                     target: self
                     selector:@selector( timerAction )
                     userInfo:nil
                     repeats:YES];
}

-(void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [timer invalidate];
    timer = nil;
}

-(void) timerAction
{
    NSLog(@"timerAction");
}

Ответы [ 12 ]

0 голосов
/ 23 июня 2009

Из invalidate Доку говорит

"Цикл выполнения удаляет и освобождает таймер либо непосредственно перед возвратом метода invalidate, либо в какой-то более поздний момент."

Я полагаю, что ваше имя будет удалено позже.

0 голосов
/ 23 июня 2009

Вы забыли отпустить таймер в viewWillDisappear:

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [timer invalidate];
    [timer release];
    timer = nil;
}

Это не должно вызывать срабатывания таймера, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...