Iphone 不停

Iphone 不停,iphone,objective-c,nstimer,dealloc,invalidation,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 } } 当通过以下方式释放类时,我停止计时器:

我有一个带有
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)

这将永远不起作用,因为计时器保留其目标,这意味着您的
dealloc
方法将永远不会被调用,直到您使计时器无效之后


有关更多信息,请参阅文档和本博客文章。您是否尝试过使用方便的调试器工具?如果在dealloc方法中设置断点,会发生什么?此外,你应该在你的作品周围张贴更多的上下文。您是否可能多次创建计时器,从而替换原来的计时器(但不会使其失效),并让它随意启动?

因此您应该在预期对象消失之前清理计时器。@Joshua+1我是这么说的。。。您必须
使计时器无效
才能将对象
释放
,这可能会触发
dealloc
方法(只是不用这么多的话):)我不会多次创建它。只有一个地方,而且只有一次。