我使用以下代码在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];
答案 0 :(得分:2)
就像民意调查一样糟糕,重复推动也很糟糕。
正如@rmaddy所说,请阅读关于计时器的文档及其工作原理。
相反,我建议:
请记住,上述情况可能不是您想要的。如果要更新UIKit视图,则可能会合并更新,并且可能会在后台线程上进行绘制。即更新计算完成后,屏幕可能无法完全绘制。
同样,确实不希望每秒N次更新,除非数据真的快速改变。如果它正在快速改变,那么请查看CADisplayLink
并构建您的代码以定位每秒特定帧的更新速率。如果它没有快速改变,那么只在数据发生变化时更新;重新绘制同样的东西是浪费电池寿命。