代码之家  ›  专栏  ›  技术社区  ›  Daniel Murali

n定时器不停止

  •  2
  • Daniel Murali  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  7
  •   Dave DeLong    15 年前

    这永远不会起作用,因为计时器会保留其目标,这意味着 dealloc 方法在 之后 你已经 invalidated

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

        2
  •  0
  •   Joshua Nozzi    15 年前

    你有没有试过使用方便的调试器工具?如果在dealloc方法中设置断点会发生什么?另外,你应该在你的作品周围贴上更多的背景。有没有可能你不止一次地创建了计时器,从而替换了原来的计时器(但没有使它失效),而让它随意启动呢?

    推荐文章