fobjc-arc 标志导致发送到已释放实例崩溃的消息

Posted

技术标签:

【中文标题】fobjc-arc 标志导致发送到已释放实例崩溃的消息【英文标题】:fobjc-arc flag causing message sent to deallocated instance crash 【发布时间】:2015-04-09 12:41:21 【问题描述】:

我有一个 MRC(手动引用计数/非 ARC)项目,我通过在这些更改后添加 "-fobjc-arc" 编译器标志将一个类文件修改为 ARC 兼容我'每当我运行像 "message sent to deallocated instance crash"

这样的应用程序时,我都会遇到运行时错误

如果我删除 -fobjc-arc 标志,那么我的应用程序将按预期工作,但使用此标志它会引发此运行时异常。 我做了很多谷歌搜索,但没有运气。 任何人都遇到过这个问题,任何帮助都提前表示感谢。

【问题讨论】:

message sent to deallocated instance crash 表示对象正在被解除分配,你永远不会在谷歌上找到解决方案,你必须深入研究你的代码并找出正在解除分配的对象以及何时/何地。 发布您的控制台日志和导致此崩溃的源代码部分 嗨@vichevstefan 我已经尝试使用异常断点和启用僵尸进行调试,但仍然没有运气:(,每次我收到“[XXXClassName tableView:heightForHeaderInSection:]: message sent to deallocated instance”异常,即使我注释掉我的 tableview 代表我得到这个异常我在 Xcode 6.1 中调试 目前还很难猜到你的原因,但要理解,请参考我的问题(我最近经历过,好像和你的问题有关)***.com/questions/29499833/… 嗨@vichevstefan,感谢您宝贵的时间和帮助,我会在调试中敲响一些时间并尝试解决它.. 【参考方案1】:

这意味着您正在向已解除分配的实例发送消息,假设为 ARC。

要查看涉及哪些消息和对象,可以添加异常断点。使用 Instruments with Allocations 工具也可能有助于调试。

按照@Mephes 的建议使用 Zombies 也是一个非常好的主意。

【讨论】:

以上是关于fobjc-arc 标志导致发送到已释放实例崩溃的消息的主要内容,如果未能解决你的问题,请参考以下文章

[UINavigationController 保留]:发送到已释放实例的消息

发送到已释放实例的消息

iOS 7 - 发送到已释放实例 0x15d17cc0 的消息 [关闭]

[UIImageAsset 保留]:发送到已释放实例的消息

发送到已释放实例问题的消息

tableView:didSelectRowAtIndexPath - 发送到已释放实例的消息