我正在尝试使用 NSZombie 调试 EXC_BAD_ACCESS 崩溃。我的应用程序创建了许多大型对象,并且启用了 NSZombie,它们不会被释放,导致应用程序在几秒钟内崩溃。这意味着我什至不能在应用程序因内存不足而崩溃之前导致 EXC_BAD_ACCESS 崩溃。
有替代方案吗?我可以在特定文件而不是整个项目上启用 NSZombie 吗?我还能如何调试该崩溃(我知道它是由UIGestureRecognizer引起的,但是我经常使用它们,因此不会明显缩小问题的范围)。
谢谢。
编辑:
谢谢你的建议。我想我可能已经解决了这个问题,并将在更多测试后报告。
编辑 2:我自己解决了这个问题,但选择了似乎可以很好地解决 future 任何类似问题的答案。
最佳答案
我能想到的就是手动实现它;创建一个代理容器,其中包含一个 id
类型的对象,并将其指定为 -forwardingTargetForSelector:
以及让它响应 -isKindOfClass:
等。
禁用代理的 ARC 并让它在 init
期间保留自己,并在指定转发目标时检查自己的 retainCount
。
如果计数为 1,则引发异常或记录警告或其他任何内容。
让可疑的类将自己包裹起来并返回一个代理作为其单元的最后一行。
对于可能的奖励点,在代理单元期间将 [NSThread callStackSymbols]
存储在某个地方(可能在磁盘上),这样您至少可以找出创建错误管理对象的位置。
关于ios - NSZombie 的替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26718668/