我的程序在指示以下内容后崩溃。我知道NSArrays发生了一些不好的事情。我应该如何跟踪导致异常的数组变量?
答案 0 :(得分:2)
追踪阵列并不会对你有所帮助(但见下文)。您已经过度发布了某些内容,可能是NSArray
本身,并且在自动释放池耗尽之前您还没有发现它。这些可能是一些最难追踪的错误;希望它能够一致地再现。
典型的解决方案是:
init
和dealloc
除外。这是避免这些内存错误的最好方法(除了ARC之外)。仪器可以在保留和释放上添加痕迹(使用Zombies仪器)。还有NSZombies,也可以提供帮助。但我发现在绝大多数情况下,最好的第一步是搜索您使用该对象的所有时间,然后手动检查您的保留和释放。 (我并不是说这些方法中的任何一种都很简单;只是快速的副手审核通常比工具更有效。)
当然要确保使用ARC。
答案 1 :(得分:0)
这样做的最好方法是在很多场合帮助你,就是设置XCode,以便在抛出异常时自动中断。您可以按如下方式执行此操作:
第1步:转到断点导航器。
第2步:转到左下方,然后点击' +'并添加异常断点。
步骤3:找到刚刚添加的断点,右键单击并编辑。
步骤4:将其更改为中断所有Objective-C异常,并且绝大多数崩溃将在发生崩溃的地方中断。
当异常发生时,您可以表现得好像正常进行调试 - 将值打印到控制台,或将鼠标悬停在控制台上以查看其值是什么。