如何在Xcode/Objective-C中调试奇怪的内存管理问题?

Nic*_*ick 1 xcode memory-management objective-c

我对Objective-C很新,而且我的记忆管理技巧也不是很好.但是,直到现在我还没有遇到过任何问题.而现在我遇到了很大问题.

我已经从零崩溃变为随机点崩溃,给我在随机类型上没有控制台输出或无法识别的选择器错误(-[NSCFSet isSameAsStop:]: unrecognized selector- 我甚至没有使用任何集合,我肯定没有在任何集合上调用我的自定义isSameAsStop.) .从随机性和错误来看,虽然我不完全确定,但对我来说这似乎是一件记忆.

我该如何调试呢?调试器假设你知道你的问题在哪里 ......而我的问题无处不在.想法?

解决方案评论

关于"启用僵尸检测运行"解决方案建议的一些说明:

  • 在"可执行文件的参数"屏幕上将NSZombieEnabled设置为YES.
  • 单击Build,然后选择Run with Performance Tool> Object Allocations,它将启动Instruments.
  • 单击Instr中对象分配上的"i"按钮.并选择僵尸检测并保留计数.
  • 重新运行并在您的应用程序中点击,它会告诉您何时击中僵尸!

谢谢您的帮助!

bbu*_*bum 6

你手上有一个经典的过度释放错误.在某处,您过度释放实现的类的实例,isSameAsStop并且恰好NSSet在原始实例被释放后在同一位置分配实例.

第一步是"构建和分析"您的代码,修复静态分析器发现的任何问题.

下一步是在启用僵尸检测的情况下运行.