>데이터 베이스 >MySQL 튜토리얼 >iOS中EXC_BAD_ACCESS解决办法

iOS中EXC_BAD_ACCESS解决办法

WBOY
WBOY원래의
2016-06-07 15:05:291321검색

在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就不会这么麻烦了。

移动开发

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.