接收到的坏接入信号

接收到的坏接入信号

当将应用程序部署到设备时,程序将在几个周期后退出,出现以下错误:

Program received signal: "EXC_BAD_ACCESS".

这个程序在iPhone模拟器上运行时没有任何问题,只要我一次只看一遍指令,它也会调试和运行。一旦我让它再次运行,我就会击中EXC_BAD_ACCESS信号。

在这种情况下,它恰好是加速度计代码中的一个错误。它不会在模拟器中执行,这就是为什么它没有抛出任何错误。但是,一旦部署到设备上,它就会执行。

这个问题的大部分答案都是关于将军的。EXC_BAD_ACCESS错误,所以我将此打开作为一个捕获-所有可怕的坏访问错误。

EXC_BAD_ACCESS通常是由于非法的内存访问而引发的。您可以在下面的答案中找到更多信息。

你有没有遇到EXC_BAD_ACCESS信号之前你是怎么处理的?


慕仙森
浏览 408回答 3
3回答

慕桂英4014372

从您的描述中,我怀疑最有可能的解释是您在内存管理中出现了一些错误。你说你已经在iPhone开发上工作了几个星期,但并不是说你对目标C是否有经验。如果您来自另一个背景,那么您需要一段时间才能真正内化内存管理规则-除非您非常重视它。记住,从一个分配函数(通常是静态的alloc方法,但还有一些其他的方法)获得的任何东西,或者一个复制方法,您都拥有内存,并且在完成时必须释放它。但如果你从其他东西中得到了什么包括工厂方法(如:[NSString stringWithFormat])然后您将有一个自动释放引用,这意味着它可能在将来的某个时候由其他代码发布-因此,如果您需要保留它的直接功能之外,那么保持它是非常重要的。如果不这样做,则可能在使用内存时仍然分配内存,或者在模拟器测试期间释放内存,但碰巧仍然有效,但更有可能在设备上运行时释放内存并显示为错误的访问错误。追踪这些事情的最佳方法,一个好主意(即使没有明显的问题)是在仪器工具中运行应用程序,特别是使用泄漏选项。

蓝山帝景

exc_bad_access的一个主要原因是试图访问释放的对象。若要了解如何解决此问题,请阅读以下文档:自动释放池即使你不认为你在“释放自动释放的对象”,这也适用于你。这种方法非常有效。我一直在使用它,并取得了巨大的成功!总之,这说明了如何使用Cocoa的NSZombie调试类和命令行“malloc_History”工具找到代码中访问的释放对象。西德诺特:运行仪器和检查泄漏将无助于对exc_bad_access进行故障排除。我很确定内存泄漏与exc_bad_access无关。泄漏的定义是一个不再具有访问权限的对象,因此不能调用它。最新情况:我现在使用仪器来调试泄漏。在Xcode 4.2中,选择Product->Profile,当仪器启动时,选择“Zombies”。

holdtom

根据我的经验,这通常是由非法的内存访问造成的。检查所有指针,特别是对象指针,以确保它们已初始化。如果您正在使用MainWindow.xib文件,请确保正确设置MainWindow.xib文件,并提供所有必要的连接。如果纸面检查没有任何结果,并且在单步执行时不会发生,那么尝试用NSLog()语句定位错误:将代码洒在代码中,移动它们,直到隔离导致错误的行为止。然后在该行上设置一个断点并运行您的程序。当您到达断点时,检查所有变量,以及它们中的对象,看看是否有任何事情不像您所期望的那样,我特别注意那些对象类是您没有想到的变量。如果一个变量应该包含一个UIWindow,但是它中有一个NSNotification,那么当调试器不在运行时,相同的底层代码错误可能会以不同的方式显示出来。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS