开发者

How to find if NSTimer is active or not?

开发者 https://www.devze.com 2022-12-10 09:41 出处:网络
I have a timer something like this: NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self

I have a timer something like this:

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                   target:self
                                         开发者_JAVA技巧        selector:@selector(updateCountdown)
                                                 userInfo:nil
                                                  repeats:YES]; 

I am updating a label's text using this timer. At a certain condition, I want to check if the timer is active then invalidate the timer. My question is how do I find that timer is active or not?


When a non repeating timer fires it marks itself as invalid so you can check whether it is still valid before cancelling it (and of course then ridding yourself of it).

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

In your case you have a repeating timer so it will always be valid until you take some action to invalidate it. Looks like in this case you are running a countdown so it will be up to you to make sure you invalidate and rid yourself of it when the countdown reaches the desired value (In your updateCountdown method)


NSTimer has an -isValid method.


Keep the timer in an instance variable, and set timer = nil when there's no timer running (i.e. after you call [timer invalidate]). Then, to check if the timer is active, you can just check whether timer == nil.


In Swift, you can use the isValid boolean to see if the timer is running:

if timer.isValid {
   // Do stuff
}

From the Apple docs:

A Boolean value that indicates whether the receiver is currently valid. (read-only)

true if the receiver is still capable of firing or false if the timer has been invalidated and is no longer capable of firing.

0

精彩评论

暂无评论...
验证码 换一张
取 消