iphone - NSTimer 没有停止

标签 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
  }
}

当类(class)发布时,我停止计时器:

- (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 方法永远不会被调用,直到您失效之后计时器。

有关详细信息,请参阅 NSTimer文档和此博客文章 "Dangerous Cocoa Calls"

关于iphone - NSTimer 没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753238/

相关文章:

用于随机数的 Swift 2.0 计时器

iphone - 我如何编写一个使用 iOS5 推特框架的 iphone 应用程序,但它会在 iOS4 上正常降级?

iphone - 无法获取调用 Controller 代码的按钮 iPhone 4

ios - 在 View Controller 之间传递数据

objective-c - 滚动到 xib(页面控制)

ios - 如何在后台运行 NSTimer 并在 iOS 中休眠?

iphone - iPad:标签栏项目标题不显示

iphone - 检测 UITextField 的焦点变化

ios - Unity3d 在 iPhone 上的表现

iphone - UIScrollView滚动不流畅?