Swift SpriteKit在多次场景更改后丢失内存

时间:2016-09-12 04:09:01

标签: ios swift memory-leaks sprite-kit

我在Swift制作游戏,其中一切都是使用SpriteKit制作的场景(基本上只是菜单+游戏场景)。目前,我从不需要将任何数据从一个场景保存到下一个场景,因此我在更改菜单或进出游戏场景时总是会呈现一个全新的场景。最近,在一些场景更改后,应用程序将崩溃,这个奇怪的错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

这真的发生在从我的主菜单转到另一个场景并连续多次回来之后。导致错误所需的次数不是恒定的,它似乎有点随机。这是我使用的场景更改代码的示例:

let new_scene = LevelEditorScene(size: CGSizeMake(self.scene!.view!.frame.width, self.scene!.view!.frame.height))
new_scene.scaleMode = .AspectFill
new_scene.currentLevel = tempLevel
let transition = SKTransition.crossFadeWithDuration(NSTimeInterval(0.5))
self.scene!.view!.presentScene(new_scene, transition: transition)

每次更改场景都会使用几乎相同或相同的代码(如果需要,基本上将值传递给下一个场景)。

此外,从某个场景到另一个场景的某种组合几乎总是会崩溃,而这次它每次都会在我的代码中的特定行发生错误。

Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

它总是发生在这个循环中:

//CUSTOM_LEVELS is an array of CustomLevel objects, which extend SKShapeNode
for tempLevel: CustomLevel in CUSTOM_LEVELS { //I specify the type because it compiles faster, it still errors without it
    tempLevel.position = CGPoint(x: SCREEN_WIDTH * 2, y: SCREEN_HEIGHT / 3) //Errors here
    self.addChild(tempLevel)
}

现在,我可以在调试器中检查tempLevel并生成它:

expression produced error: /var/folders/4r/5bbkqbjj3rvg0nvw28r8_vdr0000gn/T/lldb/30274/expr9.swift:1:46: error: use of undeclared type 'Ricochet'
$__lldb__DumpForDebugger(Swift.UnsafePointer<Ricochet.CustomLevel>(bitPattern: 0x121b24fa0).memory)
                                             ^~~~~~~~
/var/folders/4r/5bbkqbjj3rvg0nvw28r8_vdr0000gn/T/lldb/30274/expr9.swift:1:45: note: while parsing this '<' as a type parameter bracket
$__lldb__DumpForDebugger(Swift.UnsafePointer<Ricochet.CustomLevel>(bitPattern: 0x121b24fa0).memory)
                                            ^

看看它是怎么知道的类型&#34; Ricochet&#34;是什么?好吧,Ricochet是应用程序的名称。

有谁知道什么可能是错的?谢谢!

编辑:我一直在玩手机上的应用程序而且崩溃还没有发生。是否可能存在模拟器的错误?无论如何,如果有人知道它是什么,我会喜欢一个解释,但是现在我不会再担心了。

0 个答案:

没有答案