一切都很好,直到昨天我的应用程序开始表现得很奇怪。它在模拟器上工作正常,但在 iPhone4 上,即使停止它,它也会执行一个额外的循环。这是我的初始化程序,它创建一个新的 CADisplayLink 计时器或恢复现有的计时器:
-(void)initializeTimer{
if (self.theTimer == nil) {
self.theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(gameLoop)];
self.theTimer.frameInterval = 2;
[self.theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
} else {
self.theTimer.paused = NO;
}
}
我需要非常频繁地停止和恢复计时器,所以我用 pause 属性停止计时器:
self.theTimer.paused = YES;
然后我调用初始化程序来恢复它(self.theTimer.pause = NO)。如前所述,它对选择器方法执行了一次额外的调用。很奇怪,我让这个应用程序运行了一个多月没有出现 CADisplayLink 问题。我最近没有对 iPhone 进行任何更新。此外,系统声音同时停止播放,但 AVAudioPlayer 对象仍然有效。正如我所说,计时器和声音都可以在模拟器上完美运行,但我想找出导致 iPhone 出现问题的原因。所有的东西都是用纯 UIKit 完成的。任何想法从哪里开始?