ios - 收到 EXC_BAD_ACCESS 信号

标签 ios cocoa-touch

将应用程序部署到设备时,程序会在几个循环后退出,并出现以下错误:

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/

相关文章:

ios - 当收到低内存警告时,在处理过程中停止 PerformRequestsWithTarget

objective-c - 什么是 (null) 的充分测试?

ios - 当 tableView 仍在滚动时 popToRootViewController 崩溃

ios - 如何将数据传递到嵌入在TableViewCell中的UICollectionView(xCode-iOS-Swift 3)

ios - 如何下载 Firebase 存储文件

iphone - 使用核心数据按工作日分组

iphone - 是否可以在 Cocoa Touch 中观察对象的只读属性?

iphone - 应用程序在后台时更改设备语言

objective-c - iOS 核心位置(代码放在哪里?)

ios - 在动画的 UIView 上获取点的颜色