NSTimer не останавливается - PullRequest
       33

NSTimer не останавливается

2 голосов
/ 20 сентября 2010

У меня есть класс с переменной NSTimer *myTimer;. В какой-то момент я делаю:

myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES]; 

далее, у меня есть метод:

- (void)doStuff
{
  if(myTimer)
  {
    //do stuff
  }
}

и я прекращаю свой таймер, когда класс освобождается через:

- (void)dealloc
{ 
 if (myTimer) { //if myTimer==nil it already has been stopped in the same way
  [myTimer invalidate];
  myTimer = nil;
 }
}

Теперь проблема в том, что когда я освобождаю класс, таймер все равно включается и выключается. Я делаю что-то неправильно? Кажется, метод dealloc никогда не вызывается, иначе myTimer будет иметь значение nil, и даже если селектор сработает, он не попадет в if(myTimer)

Ответы [ 2 ]

7 голосов
/ 20 сентября 2010

Это никогда не будет работать, потому что таймеры сохраняют свою цель, что означает, что ваш метод dealloc никогда не будет вызван до тех пор, пока после у вас не будет invalidated таймера.

Для получения дополнительной информации см. Документацию NSTimer и этот пост в блоге по «Опасные звонки с какао»

0 голосов
/ 20 сентября 2010

Вы уже пробовали использовать удобные инструменты отладчика? Что произойдет, если вы установите точку останова в вашем методе dealloc? Кроме того, вы должны опубликовать больше контекста вокруг вашего творения. Возможно ли, что вы создаете таймер более одного раза, заменяя тем самым оригинал (но не отменяя его), и оставляете его там по желанию?

...