在 iOS 中延迟调用计划的 NSTimer 选择器



我有一个NSTimer,它应该在应用程序处于活动状态时一直运行。它旨在显示取决于特定用户操作的倒计时。我用这种方式启动计时器:

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

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

我没有遇到UI被阻止这样做的问题,但另一方面,我发现有时notifyTimerTick:选择器调用会显著延迟:我有一个需要几秒钟才能完全加载的视图,并且我看到计时器的选择器在调用相应视图控制器的viewDidLoad委托方法之前不会被调用。

我读过几篇关于定时器阻塞UI的帖子,但我不知道如何处理定时器被UI阻塞。。。处理这个问题的最佳方法应该是什么?

提前感谢

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

使用ScheduledtimerWithTimeInterval类方法时,计时器是在当前运行循环中安排的。

相反,可以这样做:

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

最新更新