我正在尝试使用EXC_BAD_ACCESS调试NSZombie崩溃。不过,我的应用程序创建了大量的大型对象,而在启用NSZombie的情况下,它们不会被发布,导致应用程序在几秒钟内崩溃。这意味着,由于内存不足,我甚至不能在应用程序崩溃之前造成EXC_BAD_ACCESS崩溃。
还有别的选择吗?我可以对特定的文件而不是整个项目启用NSZombie吗?否则,我如何调试这个崩溃(我知道它是由UIGestureRecognizer引起的,但我经常使用它们,因此不会明显缩小问题的范围)。
谢谢。
编辑:谢谢你的建议。我想我可能已经解决了这个问题,并且在经过更多的测试后会报告。。
编辑2:我自己解决了这个问题,但选择了答案,这似乎是未来任何类似问题的一个很好的解决方案。
发布于 2014-11-03 16:45:27
我所能想到的就是手动实现它;创建一个包含id类型对象的代理容器,并将其命名为-forwardingTargetForSelector:,并让它响应-isKindOfClass:等等。
禁用代理的ARC,并让它在init期间保持自身,并在指定转发目标时检查自己的retainCount。
如果计数为1,则引发异常或记录警告或其他任何内容。
让可疑类自行包装,并返回代理作为其单元的最后一行。
为了获得可能的加值,在代理的单元中将[NSThread callStackSymbols]存储在某个地方(可能在磁盘上),这样您至少可以找到创建了不正确管理的对象的位置。
发布于 2014-11-03 16:40:24
NSZombies用于使用自己内存管理的应用程序。如果你的应用程序使用ARC,那么这不会有帮助。
创建一个新的断点:所有异常
这通常会告诉你你在哪里触发错误的访问。
https://stackoverflow.com/questions/26718668
复制相似问题