我有一个NSTimer
应该在应用程序处于活动状态时一直运行。它旨在显示取决于某些用户操作的倒计时。我这样点火这个计时器:
self.timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(notifyTimerTick:)
userInfo:nil
repeats:YES];
然后,在方法notifyTimerTick:
中,我更新我向用户显示的倒计时标签,如果倒计时结束,我使计时器无效,我寻找新的倒计时,然后再次点火计时器。
我没有因为这样阻止用户界面出现问题,但另一方面,我发现有时候notifyTimerTick:
选择器调用显着延迟了:我有一个观点认为需要花费几秒钟才能完全加载,并且我已经看到,在调用相应的视图控制器的viewDidLoad
委托方法之前,不会调用计时器的选择器。
我已经阅读了几篇关于阻止UI的计时器的帖子,但是我不知道如何处理被UI阻止的计时器...处理这个问题的最佳方法应该是什么?
提前致谢
答案 0 :(得分:0)
您需要使用不同的运行循环模式。
使用ScheduledtimerWithTimeInterval类方法时,计时器将在当前运行循环中进行调度。
而是做这样的事情:
NSTimer *labelTick = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:labelTick forMode:NSRunLoopCommonModes];