NSTIMER没有安排足够的选择时间



我正在使用以下代码在2秒内更新50次UI,从而提供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];

就像投票不好一样,重复推动也很糟糕。

正如@rmaddy所说,去阅读有关计时器及其工作方式的文档。

相反,我建议:

  • 标记时间
  • 进行更新
  • 完成更新后,检查时间
  • 如果>比更新间隔,请进行更新
  • if<而不是更新间隔,请延迟更新

请记住,以上可能也不是您想要的。如果您要更新Uikit视图,则可能会合并更新,并可能在背景线程上进行绘图。IE。完成更新计算后,屏幕可能无法完全绘制。

也是,您确实不想在第二次进行更新n次,除非数据确实在快速更改。如果它正在快速改变,请查看CADisplayLink并架构您的代码,以针对每个更新速率的特定帧。如果它没有快速更改,则仅在数据更改时进行更新;重新绘制同一件事是浪费电池寿命。

最新更新