我正在尝试调试一个对象被释放太多次然后被事件循环释放的问题。下次我尝试从对象中读取时,应用程序崩溃了EXC_BAD_ACCESS。
要调试,我启用NSZombies,然后使用Zombies配置文件和Instruments。然后,我达到了我的应用程序崩溃的程度,并且仪器通知我有关将消息发送到解除分配的实例的信息。到目前为止,非常好。
它非常出色地告诉我UIKit这样的库正在释放并保留指向我对象的指针,但它没有告诉我我自己的代码在哪里做这个。它也没有显示真实的引用计数。当Instruments称引用计数为1时,根据打印出gdb中的引用计数,引用计数实际为8。
我已经研究过Instruments可能会以某种方式过滤输出,但看起来我真的记录每个版本并保留事件。它绝对必须是我的应用程序中的东西,因为我的视图控制器在显示后立即被释放,这意味着尝试做任何会向控制器发送消息的操作都会使它崩溃。
在dealloc方法中放置一个断点后,我发现我的对象确实被事件循环释放了,所以这不是由其他东西对dealloc进行恶意调用的情况。
答案 0 :(得分:1)
您不能依赖引用计数,因为Apple的Framework类可能拥有自己对象的引用。引用计数对于调试没有意义。
答案 1 :(得分:0)