内存管理机制 Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误
来源:互联网 发布:公共网络摄像头 编辑:程序博客网 时间:2024/06/11 01:49
转自:http://blog.csdn.net/lichang719/article/details/46619985
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=EXC_I386_GPFLT)错误
- 内存管理机制 Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误
- 内存管理机制 Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误
- EXC_BAD_ACCESS(code=EXC_I386_GPFLT 错误解析
- imagePlayerview exc_bad_access(code=EXC_I386_GPFLT)
- Delegate未设为nil导致的thread 1:exc_bad_access(code=EXC_I386_GPFLT)
- 僵尸对象导致crash(Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT))
- 僵尸对象导致crash(Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT))
- 【OC】thread 1:exc_bad_access(code=1,address=0x7fff7d72a7a0) 的一种解决方法
- block 传值 遇到的出错点:Thread 1:EXC_BAD_ACCESS(code=1,address=0x10)
- Thread 1:EXC_BAD_ACCESS(code=1,address=0x70) (Done)
- EXC_BAD_ACCESS iOS内存错误
- ios内存错误 exc_bad_access
- Thread 1: EXC_BAD_ACCESS
- iOS程序警告:EXC_BAD_ACCESS(code=1
- iOS程序警告:EXC_BAD_ACCESS(code=1
- EXC_BAD_ACCESS(code=1问题的解决办法
- EXC_BAD_ACCESS on UIAlertview code=1
- 学习笔记:Android SQLite,并实现SQLite基本CRUD操作的Demo
- Android磨砂图片处理(FastBlur)
- C语言实现顺序存储结构的循环链表
- 剑指offer 面试题27 二叉搜索树与双向链表
- 关于sqlite3数据库文件格式的分析
- 内存管理机制 Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误
- Ceph实战入门系列(三)——块设备-OpenStack
- Android学习28
- 尚硅谷学习笔记----声明式验证
- UIImage 读取修改像素颜色
- MAD
- 栈的应用-四则运算表达式求值
- 000
- 常量与变量、静态变量与实例变量