我正在使用以下代码在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
并架构您的代码,以针对每个更新速率的特定帧。如果它没有快速更改,则仅在数据更改时进行更新;重新绘制同一件事是浪费电池寿命。