我有这样的事情:
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
我正在使用此计时器更新标签的文本。在某种情况下我不想检查定时器是否处于活动状态,然后使定时器无效。我的问题是我怎么发现计时器是否有效?
答案 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;如果定时器已经发生,则为
无效,不再能够解雇。