NSTimer没有停止

时间:2010-09-20 16:01:24

标签: iphone objective-c nstimer dealloc invalidation

我有一个带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 个答案:

答案 0 :(得分:7)

这将永远不会有效,因为计时器保留了他们的目标,这意味着你的dealloc方法永远不会被调用,直到之后invalidated计时器。

有关详细信息,请参阅NSTimer

上的"Dangerous Cocoa Calls"文档和此博客文章

答案 1 :(得分:0)

您是否尝试过方便的调试工具?如果在dealloc方法中设置断点会发生什么?此外,您应该在创作周围发布更多上下文。您是否有可能不止一次创建计时器,从而替换原始计时器(但不会使其失效)并将其留在那里随意点火?