线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x30000008)生成问题

我在模拟器上运行一个应用程序的问题。 问题:

线程1中的objc_msgSend发生EXC_BAD_ACCESS。

截图:

在这里输入图像说明

在我的应用程序中,我有多个ViewController 。 当我点击后退button的UINavigationBar然后这种types的问题产生,我不能解释我的问题,因为所有的function正常工作。

例如: –

1 – fitstVController (正常工作)

=>它有UITableView,当我点击特定的行,那么它会在另一个UIViewController(SecoundViewController)

2 – SecoundViewController (正常工作)

=>它有UITableView和UIActionSheet。 当我selectUiActionSheet的button时,另一个UIViewController(ThirdViewController)打开

3 – ThirdViewController (正常工作)

=>它有UITableView和多个UIPickerView。 但这里有问题,我不能回到以前的UIViewController(SecoundViewController)。 =>当我这样做然后EXC_BAD_ACCESS(代码= 1,地址= 0x30000008)问题产生。

简而言之,当您释放分配给已经释放的对象的内存时,就会出现这种types的问题。 很可能,这种types的问题是在您回到以前的UIViewController (或其他情况)时生成的。

另外,我build议阅读以下链接以获得更全面的解释:

仓鼠商场档案:所以你坠毁在objc_msgSend()

设置一个exception断点意味着一旦exception发生,Xcode将立即停止执行。 这不是完全万无一失的,但这通常会导致应用程序违反导致问题的代码行。

这使得它更容易追踪问题的根源 – 尽pipe堆栈跟踪是诊断问题的明确方式,但它往往太详细,不能太多使用(特别是如果像我一样,你不是一个编译器专家。 )

要进行设置,请单击“导航器”面板中的“ Breakpoints符号,然后单击底部的“ +button。 然后从select列表中selectAdd Exception BreakpointObjective-C

正如@TimD已经正确地指出的那样,你可以设置一个exception断点 ,它将突出显示违规的代码行(而不是试图破译汇编程序或手动尝试识别问题的出处)。 和往常一样,在诊断这些内存问题的时候,你应该总是启用僵尸 。 最后,在非ARC代码中尤为重要,您应该通过静态分析器运行您的代码,因为在那里可以识别许多与内存相关的问题。 您应该始终确保从静态分析器中没有任何警告,因为它总是指出关键的编程错误。