CADisplaylink模拟器和物理设备的区别
CADisplaylink differences between simulator and physical device
我一直在使用 GLKView 构建一个基于 OpenGL 的应用程序,渲染方法由 CADisplaylink 触发。
到目前为止还不错,至少在模拟器上是这样。但是当我在物理设备上 运行 时,我的更新例程只触发一次 - 在启动时。
我知道模拟器和物理设备之间有很多差异,但我希望有人能阐明 CADisplaylink 特有的任何差异以及可能导致它不启动的原因?
我的设置是这样的:
view.enableSetNeedsDisplay = NO;
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
displayLink.frameInterval=1;
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
所以,原来我的 displayLink 仍然是 运行,但它从未有机会在设备上多次触发 - 有另一个基于计时器的事件在同一个运行循环上触发,消耗了所有可用 CPU 时间。
这并没有出现在模拟器中,因为它显然在模拟器中运行得更快并且从不发生争用。
限制计时器事件已允许 displayLink 再次触发,所以我现在的挑战是将计时器事件与另一个事件分离 thread/runloop - 与 displayLink 完全无关。
我一直在使用 GLKView 构建一个基于 OpenGL 的应用程序,渲染方法由 CADisplaylink 触发。
到目前为止还不错,至少在模拟器上是这样。但是当我在物理设备上 运行 时,我的更新例程只触发一次 - 在启动时。
我知道模拟器和物理设备之间有很多差异,但我希望有人能阐明 CADisplaylink 特有的任何差异以及可能导致它不启动的原因?
我的设置是这样的:
view.enableSetNeedsDisplay = NO;
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
displayLink.frameInterval=1;
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
所以,原来我的 displayLink 仍然是 运行,但它从未有机会在设备上多次触发 - 有另一个基于计时器的事件在同一个运行循环上触发,消耗了所有可用 CPU 时间。
这并没有出现在模拟器中,因为它显然在模拟器中运行得更快并且从不发生争用。
限制计时器事件已允许 displayLink 再次触发,所以我现在的挑战是将计时器事件与另一个事件分离 thread/runloop - 与 displayLink 完全无关。