预定的NSTimer选择器在iOS中被延迟调用

时间:2014-09-07 17:43:29

标签: ios scheduled-tasks nstimer nsrunloop

我有一个NSTimer应该在应用程序处于活动状态时一直运行。它旨在显示取决于某些用户操作的倒计时。我这样点火这个计时器:

self.timer = [NSTimer scheduledTimerWithTimeInterval:1
                                                  target:self
                                                selector:@selector(notifyTimerTick:)
                                                userInfo:nil
                                                 repeats:YES];

然后,在方法notifyTimerTick:中,我更新我向用户显示的倒计时标签,如果倒计时结束,我使计时器无效,我寻找新的倒计时,然后再次点火计时器。

我没有因为这样阻止用户界面出现问题,但另一方面,我发现有时候notifyTimerTick:选择器调用显着延迟了:我有一个观点认为需要花费几秒钟才能完全加载,并且我已经看到,在调用相应的视图控制器的viewDidLoad委托方法之前,不会调用计时器的选择器。

我已经阅读了几篇关于阻止UI的计时器的帖子,但是我不知道如何处理被UI阻止的计时器...处理这个问题的最佳方法应该是什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

您需要使用不同的运行循环模式。

使用ScheduledtimerWithTimeInterval类方法时,计时器将在当前运行循环中进行调度。

而是做这样的事情:

NSTimer *labelTick = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:labelTick forMode:NSRunLoopCommonModes];