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 的消息 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章