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

Posted

技术标签:

【中文标题】iOS 7 - 发送到已释放实例 0x15d17cc0 的消息 [关闭]【英文标题】:iOS 7 - message sent to deallocated instance 0x15d17cc0 [closed] 【发布时间】:2013-12-04 03:02:16 【问题描述】:

我有一个带有三个标签的标签栏应用程序。在第三个选项卡上有一个导航控制器,并且在那里完成了帐户设置。帐户设置完成后,我会弹出该选项卡上的所有控制器并将所选选项卡更改为第一个。但是之后当我选择第三个选项卡时,应用程序崩溃并显示消息"message sent to deallocated instance 0x15d17cc0"。此问题仅在 ios 7 上出现,在 iOS 6 或更低版本上不会出现。

【问题讨论】:

没有任何代码很难猜到。您是否尝试在启用了僵尸检测的仪器下运行您的项目?它应该会完美地告诉您在释放后引用了哪个对象。 我假设您没有使用 ARC。如果是这样,我强烈建议将您的应用程序转换为 ARC - 这将消除大部分内存管理问题。 请向我们展示弹出所有第三个标签视图的代码。也许你也在释放导航控制器? @shinyuX 它是[self.tabBarController setSelectedIndex:0]; [self.navigationController popToRootViewControllerAnimated:NO]; 这个问题应该重新打开,因为可能不涉及“代码”,因为问题可以使用原版/样板代码和情节提要来创建。 【参考方案1】:

从 Breakpoint Navigator 添加异常断点并找到该实例是什么。很可能您的问题是一个简单的内存管理问题,当您自动释放该实例而不是首先保留时,它将得到解决。

编辑:你也可以看看this great answer

【讨论】:

启用僵尸时,它会在控制台日志中打印以下消息“*** -[AddLocationsViewController respondsToSelector:]: message sent to deallocated instance 0x15d17cc0”除根以外的视图控制器。 我猜你可以在该方法中添加一个断点并逐步调试它,除非你不想使用异常断点。 它没有帮助。一旦它在弹出控制器时通过线路,就不会引发异常并调用 dealloc(s)。当我将选项卡从第一个更改为第三个时,它崩溃并且消息出现在控制台日志中 *** -[AddLocationsViewController respondsToSelector:]: message sent to deallocated instance 0x15d17cc0. 你可能做错了,问题是在调用dealloc方法后试图访问一个对象,因此你应该关注之后调用的方法。顺便说一句,您的问题是一个非常普遍的问题

以上是关于iOS 7 - 发送到已释放实例 0x15d17cc0 的消息 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

发送到已释放实例的消息

发送到已释放实例的消息

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

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

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

[NSDecimalNumber 保留]:消息发送到已释放实例 0x174222220,但为啥呢?