sim*_*one 7 debugging xcode instruments dealloc automatic-ref-counting
我花了一些时间来调试ARC和自定义dealloc函数的一个奇怪的问题.
NSOperation类的DataRequestDataRequest保持对我生成的操作的唯一引用,并在操作完成块中销毁.它总是被破坏(它dealloc总是被执行)dealloc.我只有一个NSLog调用.......问题是:
如果我在调试器中运行它,dealloc中的断点永远不会被命中,日志消息永远不会出现.主要是我以为操作漏了.
如果我在仪器中运行它,一切都很好,系统控制台打印消息,Allocations仪器报告从正确的堆栈快照中释放的操作,包括自定义dealloc.没有检测到泄漏.
我100%确定我使用相同的编译器设置进行调试和分析.
最后最令人困惑的事情:如果我创建了一个自定义版本[DataRequest dealloc]并且我付诸实践self.operation = nil;- 即使从调试器中也可以正常工作.
有没有人提示某些编译器链接器选项试图看到一些区别?这可能是Apple工具中的错误(我们所有人都在为我们自己的错误指责一条大鱼,对吧?)
......是的,我尝试过使用GDB和LLDB.结果是一样的 - 可能表明什么.
我试图创建一个简约的样本,但它只是工作(确实);)
谢谢
你有NSZombiesEnabled吗?我们遇到了同样的问题,并通过禁用NSZombies来"解决"它.
"产品" - >"方案" - >"编辑方案" - >"诊断" - >取消选中"启用僵尸对象"
我不确定为什么在启用NSZombies时不调用dealloc(我很确定它在ARC之前被调用).