ios - 具有现有分配的变量上的 Swift EXC_BAD_ACCESS

标签 ios swift exc-bad-access

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

let closeTree1 = SKSpriteNode(texture: SKTexture(imageNamed: "tree1"))

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

closeTree1: 名称:'(null)' 纹理:[ 'tree1' (721 x 1112)] 位置:{2902.64990234375, 577.58203125} 比例:{1.00, 1.00} 大小:{420, 655.16400146484375} anchor :{0.5, 0.5}旋转:0.00

我之前在 Swift 中也没有遇到过早期释放问题,所以我认为这与其他问题有关。我所做的研究表明 EXC_BAD_ACCESS 来自过度释放的变量,并且更多的是 Objective-C 问题。

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

我使用了 NSZombies 和断点,但没有效果。我也已经研究这个问题好几天了,并且在看似微不足道的行上看到了其他几个 EXC_BAD_ACCESS 错误。如果有人能对此有所启发,我们将不胜感激。

Error Message

最佳答案

我能够弄清楚这个问题,因为我没有在问题中提供很多细节,所以我将一般性地讨论它。

closeTree1 仍然被分配,因此这不是手动内存管理或 ARC 问题。我使用的是 SKAction.runBlock({functionname()}),因此在评估操作时执行 functionname() 。长话短说,这是框架中错误的部分,所以我使用 runBlock 设置一个变量来运行 update() 中的函数,现在效果很好:)。结论似乎是,考虑不周的帧进展可能会导致 EXC_BAD_ACCESS。

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

关于ios - 具有现有分配的变量上的 Swift EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769662/

相关文章:

iphone - 如何使用 MonoDevelop 和 MonoTouch 在设备上进行调试?

iphone - 具有透明背景的增强现实视频播放

ios - 从 AppDelegate 发送本地通知时出现 NSInvalidArgumentException

objective-c - Mac OS X 程序提供 EXC_BAD_ACCESS

ios - 分配数组属性总是会崩溃 EXC_BAD_ACCESS

c++ - C++ : Attempting to add new node to linked list yields “Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)” error

ios - 如何在swift 3中使用addTarget方法

ios - Xcode 8.1 - 如何更新 Storyboard 中所有 View 的帧?

ios - Swift/SpriteKit - ApplyImpluse 的速度是否以增量方式工作(每次都增加到以前的值)?

swift - 计算平移与滑动量