首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSTimer未停止

NSTimer未停止
EN

Stack Overflow用户
提问于 2010-09-21 00:01:24
回答 2查看 1.1K关注 0票数 2

我有一个带有NSTimer *myTimer;变量的类。在某种程度上,我是这样做的:

代码语言:javascript
复制
myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES]; 

此外,我还有一个方法:

代码语言:javascript
复制
- (void)doStuff
{
  if(myTimer)
  {
    //do stuff
  }
}

当类被释放时,我停止我的计时器:

代码语言:javascript
复制
- (void)dealloc
{ 
 if (myTimer) { //if myTimer==nil it already has been stopped in the same way
  [myTimer invalidate];
  myTimer = nil;
 }
}

现在的问题是,当我释放这个类时,计时器会继续计时,并不断地触发事件。我做错了什么吗?似乎从未调用过dealloc方法,否则myTimer将为空,即使触发了选择器,它也不会进入if(myTimer)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-21 00:07:43

这是行不通的,因为计时器保留了它们的目标,这意味着在你invalidated计时器之前,你的dealloc方法永远不会被调用。

有关更多信息,请参阅"Dangerous Cocoa Calls"上的NSTimer文档和此博客文章

票数 7
EN

Stack Overflow用户

发布于 2010-09-21 00:08:11

您是否尝试过您可以使用的方便的调试器工具?如果在dealloc方法中设置断点,会发生什么情况?此外,你应该围绕你的创作发布更多的上下文。您是否有可能多次创建计时器,从而替换原始计时器(但不会使其无效),并让其随意触发?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3753238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档