【发布时间】:2012-03-05 18:30:37
【问题描述】:
我正在尝试调试一个对象被释放太多次然后被事件循环释放的问题。下次我尝试从对象中读取时,应用程序会因 EXC_BAD_ACCESS 而崩溃。
为了调试,我启用了 NSZombies,然后将 Zombies 配置文件与 Instruments 一起使用。然后,我的应用程序崩溃了,Instruments 通知我一条消息正在发送到一个已释放的实例。到目前为止,一切顺利。
它很好地向我展示了 UIKit 等库在哪里释放和保留指向我的对象的指针,但它没有向我展示我自己的代码在哪里执行此操作。它也没有显示真实的引用计数。当 Instruments 说引用计数为 1 时,根据在 gdb 中打印出引用计数,引用计数实际上是 8。
我已经调查了 Instruments 以某种方式过滤输出的可能性,但看起来我确实在记录每个发布和保留事件。它绝对必须在我的应用程序中,因为我的视图控制器在显示后立即被释放,这意味着尝试执行任何会向控制器发送消息的操作都会导致它崩溃。
在dealloc方法中放置断点后,我发现我的对象确实被事件循环释放了,所以这不是其他东西对dealloc的恶意调用。
【问题讨论】:
-
发布您要实例化 ViewController 的代码。
标签: objective-c xcode ios5 instruments