好的,这就是交易,我讨厌提出有关我的调试和崩溃的问题。因为我通常自己处理它们,但我只是无法解决这个问题,即使在已经查看了多个问题之后也是如此。
好的,这就是问题所在,我发现我的应用程序随机打开和关闭,并出现此堆栈跟踪:
*** -[ViewController respondsToSelector:]: message sent to deallocated instance 0x1e5d2ef0
ViewController
的位置可能会有所不同,有时我的代码崩溃的位置与特定的 ViewController
有 NO 相关性并且不属于或调用它。
另外,为了获得控制台跟踪,我启用了 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 中删除字符?
ios - 横向模式下的 iPhone 应用程序,2008 系统