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/

相关文章:

ios - 更新到 XCode 6.3 (Swift 1.2) 后出现 "Objective-C method conflicts with optional requirement method"错误

ios - 加速 : Finding pointer address for vDSP_maxviD

ios - 收到推送通知时捕获

arrays - 将数据作为数组发送到 Firebase 给我带来了错误

我们可以直接从 Swift 使用基于 C 结构的 API 吗?

swift - 无法基于检查挂接到另一个 RxSwift 流

core-data - 尝试从子托管上下文保存到父上下文时的 EXC_BAD_ACCESS

iphone - 动画UIView时内存过度释放问题

android - 尝试了解在我的场景中非规范化与 firebase 数据库的配合情况

swift - HMCharacteristicWriteAction 的 HomeKit updateTargetValue 崩溃