并非每次玩游戏时都会发生这种情况,也许每5或10次播放一次。游戏结束时,我从运行循环中删除了CADisplayLink(用于对游戏区域进行动画处理,有点像Flappy Bird中的管道)。但是,在少数情况下,它会在那条线上崩溃。在该行旁边,它具有:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x10)
这是代码:
func endGame(r : String) {
UIView.animateWithDuration(0.4, delay: 0.2, options: .CurveLinear, animations: {
self.scoreLabel.alpha = 0
}, completion: {
(finished: Bool) in
self.scoreLabel.removeFromSuperview()
});
self.view.userInteractionEnabled = false
reason = r
println("Game Over!!!")
//Crashes on this line
blockUpdateDisplayLink.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
shiftDisplayLink.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
scoreTimer.invalidate()
UIView.animateWithDuration(0.0001, delay: 0.7, options: .CurveLinear, animations: {
}, completion: {
(finished: Bool) in
self.performSegueWithIdentifier("Game Over", sender: self)
});
}
如果我注释掉第一个CADisplayLink部分,无论如何它都会崩溃。
这是堆栈跟踪:
与上述相同的“线程1”错误。
到底是怎么回事??
最佳答案
您将CADisplayLink
添加到哪个运行循环?您可能需要改用NSRunLoop.mainRunLoop()
。
另外,如果仅将CADisplayLink
添加到一个NSRunLoop
上,则可以尝试调用blockUpdateDisplayLink.invalidate()
而不是将其删除。
如果将代码发布到创建CADisplayLink
对象的位置,这将使查找问题更加容易。
关于ios - 从运行循环中删除CADisplayLink时,游戏有时会崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25565384/