【问题标题】:Xcode continuously crashes given thread 1 exc_bad_access (code=2 address=0x8)Xcode 连续崩溃给定线程 1 exc_bad_access (code=2 address=0x8)
【发布时间】:2014-01-19 03:54:39
【问题描述】:

在研究了这个错误之后,我注意到它是特定于代码的,但是我尝试制作、加载等的任何项目都会给我同样的错误,并且总是在这个错误消息中引用代码的不同部分,但由于初始程序我设置了,它具有确切的默认代码,仅此而已,并且仍然收到相同的错误,我看不出添加我的错误日志有什么帮助。请注意,在 Xcode 5 中使用 sprite kit 并在 os x 10.8.5 上运行此错误时会出现此错误,提前感谢您的耐心、洞察力和希望的答案。

【问题讨论】:

  • SpriteKit 在 10.8.5 中不存在。仅限小牛队。

标签: ios xcode ios7 crash xcode5


【解决方案1】:

exc_bad_access 通常是由所谓的悬空指针引起的——访问一个已经被释放的对象。

要调试它,请通过以下任一方式启用僵尸对象:

  • Xcode:编辑方案并选择“启用僵尸”复选框

  • AppCode : 编辑运行配置并设置环境变量 NS_ZOMBIE_ENABLED=YES

花一些时间来学习 Objective-C 引用计数内存模型 - 保留、释放、保留周期和自动释放池。

您需要确保您的对象在使用期间一直保留。在 ARC(自动引用计数——iOS 的默认值)中,这通常意味着为将在多个类中使用的任何对象设置属性或 ivar——将一个对象指定为该对象的“所有者”。然后它将与“拥有”它的对象一起被释放。

了解 Objective-C 内存模型和 ARC 工作方式的一个好方法是尝试对一个宠物项目(至少有 2 或 3 个视图控制器)使用手动内存管理。一旦您对手动内存管理感到满意,ARC 将非常简单,并且可以节省您的时间、打字并防止忘记释放分配的对象。大多数/所有 Objective-C 基础书籍都将涵盖内存管理。 (我现在忘记了我读到的那个的名字)。

一个常见的原因

假设你有一个 UIViewController 和一个你想在当前视图控制器中呈现的视图。 . .其分配如下:

UIViewController* anotherController = [UIViewController make];
[self.view addSubView anotherController.view];

'anotherController' 现在将被释放,因为它不再被使用。如果 anotherController.view 对 anotherController 有 unsafe_unretained 引用,则会导致 exc_bad_access。

无限递归:

EXC_BAD_ACCESS 的另一个原因是无限递归,可以通过添加一些日志语句来调试它 - 很快就会变得明显!

【讨论】:

  • 谢谢,我会调查的。如果你可以请上传一个简单的例子,它会有很长的路要走。
  • 很好 - 如果您在此过程中遇到困难,请提出另一个更具体的问题。
  • @JasperBlues Xcode : Edit the scheme and choose the 'Enabled Zombies' checkbox - 你是怎么做到的?
  • @Computer_whiz123 我添加了一张图片。点击左上角的下拉菜单,选择编辑方案。
  • 这很好解释.. 但就我而言,我只是清理并重新构建再次解决了我的问题。注意:我使用 swift 4、xcode 9.2 和我的问题由结构引起。
猜你喜欢
  • 1970-01-01
  • 2014-09-19
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多