objective-c - ViewController 响应选择器 : message sent

好的,这就是交易,我讨厌提出有关我的调试和崩溃的问题。因为我通常自己处理它们,但我只是无法解决这个问题,即使在已经查看了多个问题之后也是如此。

好的,这就是问题所在,我发现我的应用程序随机打开和关闭,并出现此堆栈跟踪:

*** -[ViewController respondsToSelector:]: message sent to deallocated instance 0x1e5d2ef0

ViewController 的位置可能会有所不同,有时我的代码崩溃的位置与特定的 ViewControllerNO 相关性并且不属于或调用它。

另外,为了获得控制台跟踪,我启用了 Zombies,否则我根本不会得到控制台打印,我只会得到:objc_msgSend,我知道这意味着我正在发送消息释放。但我找不到那在哪里......我真的被困住了!通常我总是调试我的崩溃,所以我真的坚持这一点。

同样,这会在不同的时间和不同的地方崩溃,打开和关闭。它崩溃的地方与 ViewController 几乎没有相关。我觉得这很令人困惑。

您需要我的任何代码吗?我有很多文件,由于它在不同的地方崩溃,分发我的代码将是一团糟!

我尝试添加符号断点,但没有成功,并且 Zombies 在 iOS 的 Instruments 应用程序中不可用。我无法在模拟器上运行我的应用,因为它的架构框架不支持它。

谢谢大家...

最佳答案

使用 Instruments 来追踪解除分配的实例错误。分析您的应用程序 (Cmd ⌘+I) 并选择 Zombies 模板。应用程序运行后,尝试使其崩溃。你应该得到类似的东西:

单击弹出窗口中地址旁边的箭头以显示在释放后调用的对象。

您现在应该看到每个更改了此对象保留计数的调用。这可能是因为直接发送保留/释放消息以及耗尽自动释放池或插入 NSArrays。

RefCt 列显示调用操作后的 retainCount,Responsible Caller 显示执行该操作的类名和方法。当您双击任何保留/释放时,仪器将向您显示执行此操作的代码行(如果这不起作用,您可以通过选择它并在 Extended Detail 中选择它的对应项来检查调用 Pane ):

这将让您检查对象的所有 retainCount 生命周期,并且您可能会立即发现问题。您所要做的就是找到最新的版本缺少的retain

关于objective-c - ViewController 响应选择器 : message sent to deallocated instance (CRASH),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170614/

相关文章:

iphone - "wait_fences: failed to receive reply: 10

iphone - 如何拦截点击 UITextView 中的链接?

iphone - 是否有记录的方法来设置 iPhone 方向?

iphone - Xcode 调试器 : view value of variable

objective-c - 在Objective-C中将一个类的实例转换为@protocol

objective-c - 从 NSString 中删除字符?

objective-c - 数字后的 "f"

ios - 横向模式下的 iPhone 应用程序,2008 系统

objective-c - 如何获取 Root View Controller ?

objective-c - 使用 NSPredicate 根据 NSDictionary 键过滤 N