将应用程序部署到设备时,程序将在几个周期后退出,并出现以下错误:
Program received signal: "EXC_BAD_ACCESS".
该程序在iPhone模拟器上运行没有任何问题,只要我一次一步执行指令,它也会调试并运行。一旦我让它再次运行,我就会击中EXC_BAD_ACCESS
signal.
在这种特殊情况下,恰好是加速度计代码中存在错误。它不会在模拟器中执行,这就是它没有抛出任何错误的原因。但是,一旦部署到设备上,它就会执行。
这个问题的大部分答案都涉及一般性内容EXC_BAD_ACCESS
错误,所以我将把它保持打开状态,作为可怕的错误访问错误的包罗万象。
EXC_BAD_ACCESS
通常由于非法内存访问而引发。您可以在下面的答案中找到更多信息。
您是否遇到过EXC_BAD_ACCESS
之前有信号,你是怎么处理的?
根据您的描述,我怀疑最可能的解释是您的内存管理存在一些错误。你说你已经从事 iPhone 开发几周了,但没有说你是否对 Objective C 有总体经验。如果您来自其他背景,那么您可能需要一段时间才能真正内化内存管理规则 - 除非您非常重视它。
请记住,从分配函数(通常是静态分配方法,但还有其他一些方法)或复制方法获得的任何内容,您也拥有内存,并且在完成后必须释放它。
但如果你从其他事情中得到一些回报包括工厂方法(例如[NSString stringWithFormat]
)那么你将有一个自动释放引用,这意味着它可能会在将来的某个时间被其他代码释放 - 因此,如果你需要将它保留在立即函数之外,那么保留它是至关重要的。如果不这样做,内存可能会在您使用时保持分配状态,或者在模拟器测试期间被释放但碰巧仍然有效,但更有可能被释放并在设备上运行时显示为错误的访问错误。
追踪这些事情的最佳方法是在 Instruments 工具中运行应用程序,尤其是使用 Leaks 选项,这也是一个好主意(即使没有明显的问题)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)