视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
iOS中EXC_BAD_ACCESS解决办法
2020-11-09 08:23:26 责编:小采
文档


在iOS开发过程中m,经常会出现EXC_BAD_ACCESS错误而导致程序崩溃。出现这个错误的原因是由于你的对象已经被释放了,而你又调用了它的方法,相当于java中的空指针异常。很多iOS新手基本上都会遇到这个问题,尤其是对象使用了autorelease,或者自己手工过早的

在iOS开发过程中m,经常会出现EXC_BAD_ACCESS错误而导致程序崩溃。出现这个错误的原因是由于你的对象已经被释放了,而你又调用了它的方法,相当于java中的空指针异常。很多iOS新手基本上都会遇到这个问题,尤其是对象使用了autorelease,或者自己手工过早的把对象release了。

解决这个问题很简单,首先要定位到是哪个对象被释放。一旦出现EXC_BAD_ACCESS,程序会僵死掉,也就是所谓的Zombie,在xcode 做一些配置就可以看出是哪个对象出问题了,步骤如下(我的xcode版本是4.2):

Product->EditScheme->Run->Environment Variables,添加NSZombieEnabled,并设置其值为YES,这样当出现

EXC_BAD_ACCESS,就可以在控制台中看到是哪个对象被释放掉了。

另外要避免频繁的出现上述问题,下面是一些建议:

1. 当引用了别人传递进来的对象时,最好retain一下,避免在别人那里已经把对象release了,记得不用是要手工release

2. 如果使用了系统的通过静态方法来生成的对象,比如:[UIButton buttonWithType:UIButtonTypeRoundedRect],这些都是系统为了做好了autorelease,如果你不是很确定什么时候用到或者释放掉的话,最好也retain一下,同样记得用完后release掉

3. 一般建议在初始化的时候alloc你的对象,然后在delloc方法中释放,这样可以确保在整个过程中对象没有被release掉

4. 个人不太建议频繁的使用autorelease,一方面是,容易出现EXC_BAD_ACCESS错误;另一方面过多的使用autorelease会影响性能。因为autorelease不知道什么时候被释放,如果在多线程或者是大的循环中用到的话,会堆积大量的对象,这样你就不能依赖系统的autoReleasePool,而是要建立自己的autoReleasePool将他们包装起来,以便提前释放。显然用release就不会这么麻烦了。

移动开发

下载本文
显示全文
专题