【发布时间】:2011-09-20 13:21:59
【问题描述】:
我在 iPhone 上的 Objective-C 程序中遇到了一个奇怪的错误。以下是发生的事情:
- 我遇到 EXC_BAD_ACCESS 崩溃。
- 好吧,僵尸开始了,日志告诉我它是关于一个 CFNumber 获得释放,但已经被释放。仍然没有硬饼干。
- 我一直在调试,直到遇到带有两个 NSNumber 的块。我的代码中没有 CFNumber,所以我认为是这些行。
- 我尝试保留它们,但没有成功,甚至用 nil 填充它们,用新值覆盖它们等等。仍然没有。
- 我将这些行注释掉。现在日志一直在纠缠相同的 CFNumber,但现在正在发送一个“doubleValue”(而不是“release”),而它已经被释放了。我的代码中没有“doubleValue”。
这里发生了什么?僵尸在弄乱我的代码吗?我在这里陷入了死胡同。非常感谢任何帮助。
亲切的问候,
雷德
【问题讨论】:
-
猜测其他自动释放的内容,并且该内存正在被您日志中出现的其他内容占用。
-
我无法解决大部分问题,但是 CFNumbers 和 NSNumbers 是免费桥接的,所以它们完全一样,以至于无法区分机器级别。指向一个的指针也是指向另一个的指针。所以你调查 NSNumber 实例是对的。
-
您是否运行过分析器?有什么警告吗?如果你有并且看起来不错,下一步是使用泄漏的 Instruments 进行分析。
-
好的,伙计们,搞定了。显然我只是用非保留变量覆盖了一个属性(保留了)。因此,“已解除分配”错误。所以,也就是说,我分析了代码,修复了所有不好的版本,改掉了坏习惯,学到了很多东西。谢谢!
标签: ios objective-c memory-management