NSTimer Lag - iPhone SDK

时间:2010-06-15 11:45:53

标签: iphone objective-c nstimer lag

我做了一个在整个代码中使用很多计时器的游戏。然而,计时器必须在如此短的时间内处理许多任务,这导致我的游戏中存在滞后的问题。例如,我的计时器以(0.05)的间隔运行,它需要绘制和更新屏幕上的许多图像。有什么方法可以分发工作流程,以便程序运行得更顺畅吗?

由于

凯文

2 个答案:

答案 0 :(得分:2)

我会使用NSThread代替NSTimer。我在这个领域使用NSThread取得了更大的成功,因为它在一个独立的线程上运行,并没有从你的主ui线程中解雇。在线程的循环中,它为1/20(你的0.05)秒。因为线程没有在UI线程上运行,所以它的所有任务都不应该减慢你的UI速度。但是,如果没有在UI上运行,则必须调用performSelectorOnMainThread才能从此后台线程更新UI。我对我的更新方法(一个简单的布尔值)进行了锁定,该方法表明如果最后一次ui更新没有发生,请跳过这个。然后,如果我的处理时间不足,我只需要在这里或那里放一两帧。在重绘之前,我还做了很多检查,看看是否有任何改变。

答案 1 :(得分:0)

简单解决方案:Ditch NSTimer。

将重绘代码移至单个方法,然后使用CADisplayLink。使用NSTimer方法的问题是,屏幕上的所有内容都被重绘得太快或太慢。通过使用CADisplayLink,您可以将重绘代码与屏幕刷新率同步。您需要做的就是修改代码,以便它可以处理在特定时间不被调用的问题。

是的,请检查以确保您不需要像Aran Mulholland上面所说的那样重绘。只需确保检查不需要重绘。

请记住优化代码。很多。使用ivars访问对象,但使用整个属性(self.myObject =)来设置对象。