Swift EXC_BAD_ACCESS 对具有现有分配的变量

Swift EXC_BAD_ACCESS on variable with existing allocation

我对附加的错误消息有疑问。它显示了围绕变量 closeTree1 的 EXC_BAD_ACCESS 代码,定义如下:

让 closeTree1 = SKSpriteNode(纹理: SKTexture(imageNamed: "tree1"))

正如您在调试区域右侧底部看到的那样,我有一条打印行显示 Xcode 尚未解除分配 closeTree1:

closeTree1: name:'(null)' texture:[ 'tree1' (721 x 1112)] position:{2902.64990234375, 577.58203125} scale:{1.00, 1.00} size:{420, 655.16400146484375} 锚点:{0.5, 0.5} rotation:0.00

我之前在 Swift 中也没有遇到过提前释放的问题,所以我认为这与其他事情有关。我所做的研究表明 EXC_BAD_ACCESS 来自一个被过度释放的变量,更像是一个 Objective-C 问题。

当我重置场景时,这种崩溃总是不一致地发生。我不是在转换场景,而是从同一场景中删除所有 children 并将所有内容添加回去。

我已经使用了 NSZombies 和断点,但无济于事。我也在这个问题上工作了好几天,并且在看似微不足道的行上看到了其他几个 EXC_BAD_ACCESS 错误。如果有人能阐明这一点,我们将不胜感激。

Error Message

我能弄清楚问题所在,我会笼统地讨论它,因为我没有在问题中提供很多细节。

closeTree1还是被分配了,所以不是手动内存管理或者ARC的问题。我使用的是 SKAction.runBlock({functionname()}),所以 functionname() 在评估动作时执行。长话短说,这是发生这种情况的框架的错误部分,所以我使用 runBlock 设置一个变量 运行 update() 中的函数,现在它工作得很好 :)。外卖似乎是一个模糊的深思熟虑的框架进展可能导致 EXC_BAD_ACCESS.

我遇到了一些非常奇怪的运行ge(而且我确信这是不可能的)行为并出现了这个错误。当 EXC_BAD_ACCESS 错误没有出现并且程序 运行 时,有时相同的 Sprite 被添加到场景中两次,两次输入命令如下!它一定是同一个 Sprite,因为只有一个 SKSpriteNode 具有该图像并遵循这些命令。我不确定这是否是 SpriteKit 的错误,但它现在工作可靠。