如何查找NSTimer是否有效?

时间:2009-10-28 08:15:56

标签: objective-c xcode iphone-sdk-3.0 nstimer invalidation

我有这样的事情:

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                   target:self
                                                 selector:@selector(updateCountdown)
                                                 userInfo:nil
                                                  repeats:YES]; 

我正在使用此计时器更新标签的文本。在某种情况下我不想检查定时器是否处于活动状态,然后使定时器无效。我的问题是我怎么发现计时器是否有效?

4 个答案:

答案 0 :(得分:68)

当非重复计时器触发时,它会将其标记为无效,因此您可以在取消它之前检查它是否仍然有效(当然还可以自行解决它)。

if ( [timer isValid] && yourOtherCondition){
    [timer invalidate], timer=nil;
}

在你的情况下,你有一个重复计时器,所以它会一直有效,直到你采取一些行动使它失效。看起来在这种情况下你正在进行倒计时,所以当你倒计时到达所需的值时,你可以确保自己失效并摆脱它(在你的updateCountdown方法中)

答案 1 :(得分:8)

NSTimer-isValid方法。

答案 2 :(得分:5)

将计时器保留在实例变量中,并在没有计时器运行时设置timer = nil(即在您调用[timer invalidate]之后)。然后,要检查计时器是否处于活动状态,您只需检查timer == nil

答案 3 :(得分:1)

在Swift中,您可以使用isValid布尔值来查看计时器是否正在运行:

if timer.isValid {
   // Do stuff
}

来自Apple docs

  

一个布尔值,指示接收器当前是否为   有效。 (只读)

     

如果接收器仍然能够发射,则为true;如果定时器已经发生,则为   无效,不再能够解雇。