我正在尝试使用 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/

10-09 23:55