Environment Variables 中激活 NSZombieEnabled。此外,我在 Diagnostics > Memory Ma-6ren">
gpt4 book ai didi

iphone - 如何在 Xcode 4 中调试 "message sent to deallocated instance"?

转载 作者:IT王子 更新时间:2023-10-29 07:36:49 26 4
gpt4 key购买 nike

我按下 alt+cmd+r 并在 Arguments > Environment Variables 中激活 NSZombieEnabled。此外,我在 Diagnostics > Memory Management > Enable Zombie Objects 中激活了它。

但是,当我构建并运行时,有时我的应用会崩溃,并在控制台中显示这条无用的消息:

*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260

堆栈跟踪同样无用。我将细节级别 slider 一直向右移动。线程 1 只是向我展示了这一点:

screenshot

一切都是系统拥有的,没有一行与我的应用相关。所以很明显 NSZombiesEnabled 不能像在 Xcode 3 中那样工作,它在死对象上停止。

有什么方法可以找出哪个 CALayer 过早释放?

更新:所以在构建和运行大约 100 次之后,问题突然消失了!完全没了!最棒的是:我没有以任何方式修改我的代码!在此期间,我多次使用 clean 命令清理构建文件夹和项目,并多次删除模拟器中的应用程序。

更新二:幸好问题又出现了。现在它似乎很执着。幸运的是,因为我更喜欢找到根本原因,而不是随机地惹恼用户。

更新三:终于无意中找到了:

startButton = newBttn;

应该是:

self.startButton = newBttn;

startButton 是一个保留属性,在 -dealloc 中我释放了它。所以它被过度释放并且在大多数(但不是全部)情况下 View 淡出后它崩溃并给出奇怪的 CALayer retainCount 消息。

Zombies Instrument (CMD + I) 最后指出它与按钮有关。只是不知道为什么以及在哪里。

Clang Static Analyzer 没有提示这个明显的故障。

最佳答案

如果再次出现这种情况,您可以运行专用的 Zombies 工具。按 Command+I 来配置应用程序并选择 Zombies 工具(您必须在模拟器上运行)。如果您得到一个僵尸,您可以显示该对象的整个内存历史记录(每次保留/释放),这对于跟踪错误非常有帮助。

关于iphone - 如何在 Xcode 4 中调试 "message sent to deallocated instance"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com