从Xcode启动时,iPhone应用程序的运行方式不同

从Xcode启动时,iPhone应用程序的运行方式不同,iphone,nstimer,frame-rate,cadisplaylink,Iphone,Nstimer,Frame Rate,Cadisplaylink,我正在开发一款基本上有两个定时器来控制游戏性的游戏。一个计时器是一个CADisplayLink,它可以调用重新绘制每一帧的显示(使用OpenGL),所以略低于60 Hz。另一个计时器是更新游戏逻辑的NSTimer,我尝试在30 Hz到100 Hz之间的任何地方运行它 当我在iOS模拟器中运行这个程序时,它是滞后的,似乎在跳过帧。当我在手机上使用Xcode运行程序时,它可以完美地工作,没有任何延迟或跳转。然后,当我从手机主屏幕上的图标运行程序时,它会延迟运行 在我的手机上加载程序和从Xcode运行

我正在开发一款基本上有两个定时器来控制游戏性的游戏。一个计时器是一个CADisplayLink,它可以调用重新绘制每一帧的显示(使用OpenGL),所以略低于60 Hz。另一个计时器是更新游戏逻辑的NSTimer,我尝试在30 Hz到100 Hz之间的任何地方运行它

当我在iOS模拟器中运行这个程序时,它是滞后的,似乎在跳过帧。当我在手机上使用Xcode运行程序时,它可以完美地工作,没有任何延迟或跳转。然后,当我从手机主屏幕上的图标运行程序时,它会延迟运行

在我的手机上加载程序和从Xcode运行程序以及从手机本身启动程序之间有什么区别?我知道它正在与Xcode调试器通信,但当连接到Xcode时,它如何工作得更好呢


最后,当我从同一个CADisplayLink运行游戏逻辑和图形时,延迟似乎要小得多。同时拥有显示链接和NSTimer真的会导致这样的问题吗?

只是猜测而已。你有一个赛车的条件,迫使你的应用程序卡在同步块很多。当你使用调试器时,不会发生竞速情况,代码阻塞也不会出现任何问题。对不起,你能解释一下你的意思吗?什么是竞速条件?什么会导致应用程序进入竞速条件?如果您有一个多线程代码,其中多个块同时访问同一段代码,则当您在这些块之间进行同步时,可能会影响性能。当您使用调试器启动应用程序时,一些导致同步情况的线程可能会运行较慢,从而导致同步情况不太频繁。这将防止其他线程阻塞。但这只是一个猜测,可以用有限的信息。我相信您的案例是复杂应用程序的一部分,因此您无法提供用于进一步分析的代码段。我认为Nikita在这方面做得很好,因为我在代码中看到了处理竞争条件时的确切行为。在调试时,系统上的轻微负载差异足以触发或防止两个不同线程之间的冲突。