iOS中EXC_BAD_ACCESS解决办法

php中文网
发布: 2016-06-07 15:05:29
原创
1463人浏览过

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

移动开发

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号