【问题标题】:How to find if NSTimer is active or not?如何查找 NSTimer 是否处于活动状态?
【发布时间】:2010-12-10 18:50:03
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    在您的情况下,您有一个重复计时器,因此它始终有效,直到您采取一些措施使其无效。在这种情况下,您似乎正在运行倒计时,因此当倒计时达到所需值时(在您的 updateCountdown 方法中)

    【讨论】:

    • 很棒的例子!谢谢
    【解决方案2】:

    NSTimer 有一个 -isValid 方法。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        if timer.isValid {
           // Do stuff
        }
        

        来自Apple docs

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-11
          • 2019-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-06
          相关资源
          最近更新 更多