【问题标题】:SpriteKit EXC_BAD_ACCESS NSTimerSpriteKit EXC_BAD_ACCESS NSTimer
【发布时间】:2015-03-05 11:15:23
【问题描述】:

我有一个在 GameViewController 中实现的 GameScene。 GameViewController 包含游戏场景上方的后退按钮。所以当我完成我的游戏时,我有一个延迟 2 秒的 NSTimer。

self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0
                                              target:self
                                            selector:@selector(playAnimation)
                                            userInfo:nil
                                             repeats:NO];

但是,如果我点击后退按钮,我的视图控制器会弹回,但即使在弹出到上一个视图控制器之后,游戏场景中仍然有音乐,并且在我的计时器将尝试调用它之后会导致访问错误,因为场景似乎已经被释放。

所以我从来没有在游戏场景中使用 dealloc 方法,我可以使我的计时器无效。

【问题讨论】:

  • 你不能在viewWillDisappear中添加你所有的关闭代码吗?

标签: ios sprite-kit nstimer


【解决方案1】:

target 将消息发送到的对象 定时器触发时的选择器。计时器保持强参考 直到它(计时器)失效。

所以我猜在你的计时器触发之前,视图控制器永远不会被释放。

那么你不能让 viewWillDisappear 中的计时器失效吗?

【讨论】:

  • 计时器它是游戏场景的一部分,但似乎游戏场景会在收到 dealloc 消息之前存在一段时间。我想这是因为 SKAction playSoundFileNamed: 方法。所以当它播放声音时,场景就在记忆中。
  • 能否粘贴代码并指出导致异常的行。
【解决方案2】:

我使用了在游戏中播放声音的 SKAction,即使在我关闭视图控制器之后,由于播放声音,游戏场景似乎仍在内存中。但是当声音结束时,游戏场景似乎得到了一个dealloc,但定时器仍在等待它的调用,我认为它会导致访问错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多