并不是每次玩游戏时都会发生这种情况,可能每玩 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”错误。
到底是怎么回事??