30

我有一个类似这样的计时器:

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

我正在使用此计时器更新标签的文本。在某种情况下,我想检查计时器是否处于活动状态,然后使计时器无效。我的问题是如何找到计时器是否处于活动状态?

4

4 回答 4

70

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

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

在您的情况下,您有一个重复计时器,因此它始终有效,直到您采取一些措施使其无效。看起来在这种情况下,您正在运行倒计时,因此当倒计时达到所需值时,您需要确保自己无效并摆脱它(在您的 updateCountdown 方法中)

于 2009-10-28T11:16:14.350 回答
8

NSTimer-isValid方法。

于 2009-10-28T09:27:01.350 回答
5

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

于 2009-10-28T08:31:36.670 回答
1

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

if timer.isValid {
   // Do stuff
}

来自苹果文档

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

如果接收器仍然能够触发,则为 true;如果计时器已失效且不再能够触发,则为 false。

于 2016-04-19T23:16:48.393 回答