将应用程序部署到设备时,程序会在几个循环后退出,并出现以下错误:
Program received signal: "EXC_BAD_ACCESS".
该程序在 iPhone 模拟器上运行没有任何问题,只要我一次一个地执行说明,它也会调试并运行。只要让它再次运行,我就会触发 EXC_BAD_ACCESS
信号。
在这种特殊情况下,恰好是加速度计代码中的错误。它不会在模拟器中执行,这就是它没有抛出任何错误的原因。但是,它会在部署到设备后执行。
这个问题的大部分答案都处理一般的 EXC_BAD_ACCESS
错误,所以我将把这个问题留作一个包罗万象的错误访问错误。
EXC_BAD_ACCESS
通常是由于非法内存访问而引发的。您可以在下面的答案中找到更多信息。
您以前是否遇到过EXC_BAD_ACCESS
信号,您是如何处理的?
最佳答案
根据您的描述,我怀疑最可能的解释是您的内存管理存在一些错误。您说您已经从事 iPhone 开发工作几周了,但并没有说明您是否对 Objective C 有一般的经验。如果您来自其他背景,您可能需要一段时间才能真正内化内存管理规则 - 除非您非常重视它。
请记住,您从分配函数(通常是静态分配方法,但还有一些其他方法)或复制方法中获得的任何内容,您也拥有内存并且必须在完成后释放它。
但是如果你从几乎所有其他包括工厂方法(例如[NSString stringWithFormat]
)中得到一些东西,那么你就会有一个自动释放引用,这意味着它可能会在将来的某个时间由其他代码发布 - 因此,如果您需要将它保留在您保留它的直接功能之外,这一点至关重要。如果不这样做,内存可能会在您使用它时保持分配状态,或者在您的模拟器测试期间被释放但巧合仍然有效,但更有可能被释放并在设备上运行时显示为错误的访问错误。
追踪这些事情的最佳方法,无论如何也是一个好主意(即使没有明显的问题)是在 Instruments 工具中运行应用程序,尤其是使用 Leaks 选项。
关于ios - 收到 EXC_BAD_ACCESS 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/327082/