停止NSTimer持续增加间隔

时间:2013-02-04 02:28:36

标签: iphone ios objective-c nstimer

我的countDown计时器有一个奇怪的问题。该计时器从设定时间(即60秒)开始倒计时。这段代码放在myViewDidLoad方法中。除非我回去再加载视图,否则一切正常。每次加载视图时,倒计时都会增加1秒。

例如:

  1. 首次装载:60,59,58 ......
  2. 第二次加载:60,58,56 ......
  3. 第三次加载:60,57,54 ......
  4. 我的代码如下。有谁知道为什么会这样?我需要在某个地方发布一些东西吗?谢谢!

    countDown=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
    selector:@selector(TimeOver) userInfo:nil repeats:YES];
    

1 个答案:

答案 0 :(得分:6)

每次加载视图时,都会创建一个新计时器,但旧计时器仍然存在。在计时器的操作方法TimeOver中,您正在递减一个跟踪秒的索引变量,每个计时器每次触发时都会运行该方法。所以,如果你有三个定时器,索引每次都会减少三个。

您需要在视图加载时不创建新的计时器,或者更好地在视图消失时销毁计时器:

[countDown invalidate];
countdown = nil;

并在重新出现时重新创建它。

另外,请注意您的计时器的操作方法具有错误的签名。它应该是一个不返回任何内容并且接受一个参数的方法,它就是计时器本身,如下所示:

- (void)timeOver: (NSTimer *)tim;

此外,Cocoa方法不应以大写字母开头。