gpt4 book ai didi

ios - Xcode 连续崩溃给定线程 1 exc_bad_access (code=2 address=0x8)

转载 作者:可可西里 更新时间:2023-11-01 03:41:30 26 4
gpt4 key购买 nike

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

最佳答案

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

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

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

Edit Scheme

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

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

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

了解 Objective-C 内存模型和 ARC 工作方式的一个好方法是尝试在宠物项目(至少有 2 或 3 个 View Controller )上使用手动内存管理。一旦您对手动内存管理感到满意,ARC 就会变得 super 简单,并且可以节省您的时间、打字时间并防止忘记释放已分配的对象。大多数/所有 Objective-C 基础知识书籍都会介绍内存管理。 (我现在忘记了我读过的那本书的名字)。

一个常见原因

假设您有一个 UIViewController 和一个要在当前 View Controller 中呈现的 View 。 . .其分配如下:

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

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

无限递归:

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

关于ios - Xcode 连续崩溃给定线程 1 exc_bad_access (code=2 address=0x8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com