某些时候,你可能会遇到由EXC_BAD_ACCESS引起的崩溃。在这片文章中,你将学会什么是EXC_BAD_ACCESS,以及它是由什么引起的。我也将提出一些解决由EXC_BAD_ACCESS引起的bug的技巧。
什么是EXC_BAD_ACCESS?
一旦你理解了EXC_BAD_ACCESS的根本原因,你会更好地理解它这个含义模糊的名称。这里有一个简单的解释和一个更加专业的解释。让我们首先以这个简单的解释开始吧。
保持简单
无论何时你遇到了EXC_BAD_ACCESS,那就意味着你正在发送一个消息给一个对象,而这个对象已经被释放掉了。这是最常见的情况,但是下面来看看更多的解释。
真正含义
专业的解释有一些复杂。在C和Objective-C中,经常处理指针。指针无非是存储另一个变量的内存地址的变量。当你发送一个消息给一个对象,那么指向这个对象的指针需要被引用。这意味着,你取得这个指针指向的内存地址而且访问那块内存的值。
当那块内存不再与你的应用程序映射,或者,换一种说法,那块内存不再以你所期许的方式被使用,那么,就有可能无法访问到那一块内存。当这种情况发生的时候,内核发送异常( EXC ),表明你的应用程序无法访问到那块内存(BAD ACCESS)。
概括起来就是:当你遇到EXC_BAD_ACCESS时,意味着你在尝试向一块内存发送消息,而这块内存无法执行这个消息。
然而,有时候,EXC_BAD_ACCESS是由一个corrupt pointer(即野指针)引起的。每当你的应用