EXC_BAD_ACCESS

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

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

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

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

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

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

时间: 2024-10-10 16:50:45

EXC_BAD_ACCESS的相关文章

关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案

关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案 随着用xcode开发的深入,相信很多同学都对出现SIGBAT或者EXC_BAD_ACCESS的问题,编译是对的,运行时做了某些操作,就跳到main函数里面了, 然后出现SIGBAT或者EXC_BAD_ACCESS的提示, 提示的信息无法正确判断出错原因.  下面给大家提供一个方法,会在控制台中输出出现SIGBAT或者EXC_BAD_ACCESS的原因, 基本90%能解决你的问题. ? 1 2 3 4 5 6 7 8 9 第一

Xcode崩溃问题调试 signal SIGABRT&EXC_BAD_ACCESS

在进行app开发过程中会遇到很多的问题,各种崩溃令人相当头疼.当然,解决bug的能力也体现了一个程序员的水平,现在来说一说开发中经常遇到的崩溃问题吧. 常见崩溃问题: 一是signal SIGABRT, 二是EXC_BAD_ACCESS. 一.signal SIGABRT 出现这样的崩溃一般有两个原因:1. 数组越界 输入: NSArray *array = [NSArray arrayWithObject:@"0"]; NSString *str = [array objectAtI

解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled

我们做iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像Thread 1: Program received signal:"EXC_BAD_ACCESS",让问题无从找起. 比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如release 的对象再 release,release 那些autorelease 的对象等也会报这

iOS 崩溃调试 exc_bad_access(code=1,address=0x10)

今天在测试过程中,发现了一个问题, 就是在ios 8以上的机器测试没有问题,在ios 7上面测试很容易出现崩溃, 直接来了一句exc_bad_access(code=1,address=0x10),毫无头绪, 就查资料,步骤如下: 1. 设置僵尸对象, 获取更多的提示信息 结果:真的获取了更多的信息:message sent to deallocated instance 2. 然后 网上又搜资料, 大概的意思就是 通过找的已经释放的地址,通过LLDB找到内存的释放历史,具体可参考: http:

iOS开发——调试技巧OC篇&EXC_BAD_ACCESS无处不在

EXC_BAD_ACCESS无处不在 这种错误可以说是每次写代码都会遇到的,所以如果是你你会怎么解决呢,如果不知道那么请往下看 EXC_BAD_ACCESS, objc_msgSend, 此类报错往往来的莫明奇妙. 原因往往是内存过度释放导致, 即多写了release; 至于是哪里多写了release, 很难查知, 以下及为查询方法. 出现这种情况, 也就是对指针对象的过度释放,导致次指针为野指针报错, (注意:如:[nil release] 操作空指针是不会报错的,在java中是有问题, [野

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

message sent to deallocated instance EXC_BAD_ACCESS 获取更多调试信息

设置环境变量: 只在DEBUG版本设置,自己调试使用,设置这两个参数则内存是不会释放掉的. 当出现message sent to deallocated instance EXC_BAD_ACCESS,会在xcode console打印出类似的日志: 2015-09-09 12:00:54.073 TrialTest[71354:3044411] *** -[ZNNullDelegateViewController retain]: message sent to deallocated ins

ios开发笔记----exc_bad_access(code=1, address=0x789870)野指针错误,假死debug状态

错误原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调用其它的方法就会出现野指针错误. 例如: Person *jerry = [[Person alloc]init];  //  retainCount引用计数为1 [jerry eat];  //  调用吃的方法 [jerry release];  //  释放jerry这个对象到 retain

exc_bad_access(code=1, address=0x789870)野指针错误

原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调用其它的方法就会出现野指针错误. 解决办法: 首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的. iOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被