繁体   English   中英

NSTimer延迟-iPhone SDK

[英]NSTimer Lag - iPhone SDK

我制作了一个在整个代码中都使用许多计时器的游戏。 但是,计时器必须在这么短的时间内处理许多任务,这会导致游戏延迟的问题。 例如,我的计时器以(0.05)的间隔运行,它需要绘制和更新屏幕上的许多图像。 有什么办法可以分配工作流程,使程序运行更流畅?

谢谢

凯文

我会使用NSThread而不是NSTimer 我在使用NSThread的这方面取得了更大的成功,因为它在独立线程上运行,并且不会从您的主ui线程触发。 在线程循环中,将其休眠1/20(即0.05)秒。 由于线程不在UI线程上运行,因此它的所有任务都不会降低UI的速度。 但是,由于它不在UI上运行,因此您必须调用performSelectorOnMainThread才能从该后台线程更新UI。 我在我的更新方法(一个简单的布尔值)上加了一个锁,说如果上一次ui更新没有发生,请跳过此更新。 然后,如果即时通讯用完了处理时间,我在这里和那里放一两帧。 在重画之前,我还做了很多检查,看是否有任何实际更改。

简单的解决方案:Ditch NSTimer。

将重绘代码移动到单个方法,然后使用CADisplayLink 使用NSTimer方法的问题在于,对于屏幕而言,所有内容的绘制速度都太快或太慢。 通过使用CADisplayLink,您可以将重绘代码同步到屏幕刷新率。 然后,您需要做的就是修饰您的代码,以便可以处理在特定时间不被调用的代码。

是的,请检查以确保您不需要像Aran Mulholland所说的那样重新绘制。 只要确保支票用不了多久就可以了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM