为什么NSTimer会在应用暂停时持续触发?

时间:2016-06-16 19:50:20

标签: ios nstimer

据我所知,iOS应用程序生命周期隐藏有两个不同的阶段:

  • 背景 - 当我们仍然能够继续计算并运行代码时;
  • 已暂停 - 当任何计算被冻结时,我们无法执行任何操作,直到用户返回应用程序。

所以我对以下例子感到有些困惑:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    (void)(^expirationHandler)() = [^{
        [application endBackgroundTask:bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
    } copy];   
    self.bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:expirationHandler];
    [NSTimer scheduledTimerWithTimeInterval:1.0
                                     target:self
                                   selector:@selector(count)
                                   userInfo:nil
                                    repeats:YES];
    expirationHandler();
}

- (void)count {
    int i = 0;
    while (i < 10000000) {
         i++;
    }
    NSLog(@"%d", i);
}

P.S。我已经从记忆中复制了它,让我知道是否有错误,但问题与片段的正确性无关。

我使用iOS 9.3在iPhone 6+上进行了测试,并且指定的计时器持续触发,此外count方法执行代码(您可以通过i值检查)。我是对的,应用程序必须在计时器安排后进入暂停状态吗?如果是这样,为什么count能够执行代码?

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据评论中的@Paulw11

  

您是否在Xcode中的调试器下运行时进行测试?如果是这样,那么您的应用程序没有后台时间限制或被暂停

我没有找到任何证据,但通过实证调查,它似乎是真的。