我在模拟器上运行应用时遇到问题。 问题:
EXC_BAD_ACCESS发生在线程1中的objc_msgSend。
屏幕截图:
在我的应用程序中,我有多个ViewController
。当我点击UINavigationBar
的后退按钮然后生成这种类型的问题时,我无法解释我的问题,因为所有功能都能正常工作。
示例: -
1 - fitstVController
(正常工作)
=>它有UITableView,当我点击特定的行然后它将继续另一个UIViewController(SecoundViewController)
2 - SecoundViewController
(正常工作)
=>它有UITableView和UIActionSheet。当我选择UiActionSheet的按钮,然后另一个UIViewController(ThirdViewController)打开
3 - ThirdViewController
(正常工作)
=>它有UITableView和多个UIPickerView。但这里有问题,我不能回到上一个UIViewController(SecoundViewController)。 =>当我这样做,然后生成 EXC_BAD_ACCESS(代码= 1,地址= 0x30000008)问题。
答案 0 :(得分:16)
简而言之,当您释放分配给已释放的对象的内存时,会发生此类问题。最有可能的是,当您返回到之前的UIViewController
(或其他情况)时,会生成此类问题。
另外,我建议阅读以下链接以获得更全面的解释:
答案 1 :(得分:5)
设置异常断点意味着一旦引发异常,Xcode就会停止执行。它并非完全万无一失,但这通常会导致应用程序破坏导致问题的代码。
这使得更容易找到问题的根源 - 尽管堆栈跟踪是诊断问题的最终方式,但它通常过于详细而无法使用(特别是如果像我一样,你不是编译专家。)
要进行此设置,请单击导航器面板中的Breakpoints
符号,然后单击底部的+
按钮。然后从选项列表中选择Add Exception Breakpoint
和Objective-C
。
答案 2 :(得分:1)
正如@TimD正确指出的那样,你可以设置exception breakpoint,它会突出显示有问题的代码行(而不是试图破译汇编程序或手动尝试识别问题所在)。并且,与往常一样,在诊断这些类型的内存问题时,您应始终enable zombies。最后,在非ARC代码中尤为重要,您应该通过static analyzer运行代码,因为可以在那里找到许多与内存相关的问题。您应该始终确保静态分析器没有警告,因为它总是指出关键的编程错误。