Jas*_*ues 10
exc_bad_access通常由所谓的悬空指针引起 - 访问已经解除分配的对象.
要调试它,请通过以下任一方式启用僵尸对象:

花一些时间来学习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的另一个原因是无限递归,可以通过添加一些日志语句来调试 - 它很快就会变得明显!
| 归档时间: | 
 | 
| 查看次数: | 17164 次 | 
| 最近记录: |