NSTimer没有安排足够的选择器时间

时间:2016-12-06 15:50:19

标签: objective-c uilabel nstimer

我使用以下代码在2秒内更新ui 50次,给出0.04时间间隔。但是,updateLabels方法只被调用5或6次,有时甚至远50次。这是因为我阻止了任何主线程吗?你们知道如何让它发挥作用吗?

self.timer = [NSTimer timerWithTimeInterval:0.04
                                     target:self                     
                                   selector:@selector(updateLabels)
                                   userInfo:nil 
                                    repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

1 个答案:

答案 0 :(得分:2)

就像民意调查一样糟糕,重复推动也很糟糕。

正如@rmaddy所说,请阅读关于计时器的文档及其工作原理。

相反,我建议:

  • 标记时间
  • 进行更新
  • 更新完成后,检查已用时间
  • if>比更新间隔,做更新
  • 如果<比更新间隔,做延迟更新

请记住,上述情况可能不是您想要的。如果要更新UIKit视图,则可能会合并更新,并且可能会在后台线程上进行绘制。即更新计算完成后,屏幕可能无法完全绘制。

同样,确实不希望每秒N次更新,除非数据真的快速改变。如果它正在快速改变,那么请查看CADisplayLink并构建您的代码以定位每秒特定帧的更新速率。如果它没有快速改变,那么只在数据发生变化时更新;重新绘制同样的东西是浪费电池寿命。