内存管理机制 Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误

iOS5之后苹果公司引入了ARC机制,大大方便了ios开发者对内存的管理机制。在iphone 4出世的时候为什么ios在512M的内存中可以运行很大的游戏,保持畅快流畅的状态。得益于ios非常好的内存处理机制。

      在我们现在创建项目的时候,默认会直接引入ARC机制,我们可以关闭ARC机制:在输入框中输入long点击搜索按钮,如图:技术分享

         接下来即可进行老版本的内存操作了。

在老版本中,内存操作采用了引用计数(retainCount)alloc retain(+1)release(-1)

内存管理原则(配对原则):只要出现了new,alloc,retain,就一定配对出现一个release,autorelease

使引入数+1,必须对应的-1,务必成对存在

ClassA *obj1 = [[ClassA alloc] init]; //retaincount = 1

ClassA *obj2 = obj1; //retaincount = 1

[obj2 retain]; //retaincount = 2

当引入计数变为0的时候,会自动调用系统的dealloc系统函数

-(void)dealloc

{

[super dealloc];//注意一定要调用父类函数

NSLog(@"对象被删除");

 }

野指针:

在开发中经常会遇到野指针,系统一般会提示为Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误。因为你访问了一块已经不属于你的内存。

但我们在开发中可能会发现系统并不会时时检测野指针,主要是为了提高编译效率,默认关闭了野指针检测机制,打开方法:技术分享技术分享 

在Enable Zombie Objects上点击对号,关闭即可。

注意:一般我们最好不要打开该机制,这样编译时的效率将大大降低。

内存泄露:

只要对象的retainCount !=0就会一直存在在内存中,不再被使用的对象,一直在内存中没有被销毁,则会造成内存泄露。

@property 参数

1.与set方法内存管理相关参数

retain:要生成符合内存管理原则的set方法(应用与对象类型)

assign:直接赋值(对象类型,基本数据类型)

capy

2多线程相关

nonatomic:不生成多线程代码。(一般都用这个,效率高)

atomic:生成多线程管理代码

3.是否要生成set跟get方法

readwrite:可读可写属性,同时生成set跟get方法

readonly:只读属性,只生成get方法

4.set与get方法名称相关的参数

setter:设置生成set方法的名称

getter:设置生成的get方法名称

实例:

@property(nonatomic,retain)Class *class;

@property(nonatomic,retain)NSString *name;

@property(nonatomic,assign)int age;

@property(nonatomic,assign,readonly)int age;

@property(nonatomic,assign,setter=abc:)int age;//注意有冒号

"thread 1: exc_bad_access code" 是指在程序运行时发生了“访问非法内存”的错误。这种错误通常是由于代码中对一个不存在或不可访问的内存地址进行读取或写入操作引起的。 当一个线程尝试访问一个无效的内存地址时,操作系统会报告一个异常(exception),通常称为“exc_bad_access”。这个异常的错误代码(code)可能会提供更多关于错误的具体信息。 常见的导致“exc_bad_access code错误的情况包括: 1. 空指针引用:尝试访问一个指向空地址的指针。 2. 野指针引用:尝试访问一个已经释放或不再有效的内存。 3. 数组越界访问:尝试访问一个数组之外的元素。 4. 访问已释放的对象:尝试访问一个已经释放的对象的成员变量或方法。 5. 内存溢出:尝试访问操作系统未分配给程序的内存空间。 要解决“thread 1: exc_bad_access code错误,可以通过以下方式: 1. double-check代码中的指针或数组访问,确保没有空指针引用或越界访问。 2. 确保在访问动态分配的内存(如对象或数组)之前,它们已经正确地分配和初始化。 3. 如果有多个线程访问同一块内存,请使用同步机制(如互斥锁)来避免竞争条件和数据访问冲突。 4. 调试程序以查找并纠正任何内存错误,可以使用调试器或打印出相关变量的值进行排查。 总之,“thread 1: exc_bad_access code”表示程序出现了访问非法内存错误,需要审查代码并修复相关问题才能消除错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值