ios自动释放池相关,autoreleasepool;
来源:互联网 发布:天刀捏脸数据女女神 编辑:程序博客网 时间:2024/05/17 08:40
在iOS中是没有像JAVA那样的垃圾回收机制的,它用到的是引用计数技术,及alloc一个对象时,这个对象就会有一个引用计数,如果该对象被通过retain或者copy引用是,它自身的引用计数就会+1,遇到release自身的引用技术就会减1,当这个对象的引用计数为1时,就会自动调用dealloc函数来释放掉它所拥有的对象类型的变量,然后系统收回该对象所占的内存.
在内存机制中,alloc和dealloc是对应使用的,alloc用来给对象开辟内存,而dealloc是用来在对象释放时收回内存;retain,copy是release对应使用的,前两者都是给对象的引用计数+1,后者-1;
在ios开发中,很多开发者经常会遇到的内存问题是自己写了alloc或者retain,copy后并没有写release,或者在错误的位置写了release,导致程序错误,或者内存泄露等问题,自动释放池的使用就可以把对象集中管理或者分批管理,在需要的某一个时刻一起释放掉.
在iOS中释放池的使用方法有两个:
第一个是:@autoreleasepool{
......
}
两个大括号之间便是释放池了,在内创建的对象在通过调用autorelease方法后会使对象延迟释放,在碰到下面的大括号的时候释放;
第二个是NSAutoreleasepool *pool = [[NSAutoreleasepool alloc]init] ;
''''''
[pool release];
这个释放池是程序员自己写的释放池,使用原理跟@auto是一样的,只不过这个是在对象碰到[pool release]后调用dealloc来进行释放;
一般我们会在便利构造器中的return后面加上autorelease,这样我们就不用在主函数或者类文件外面给对象创建时手动添加autorelease方法,也避免了大意而没有给对象自动释放;
在类的.m文件中给便利构造器添加自动释放其实只是一个方法调用,是对象在用便利构造器创建的时候自身就有了一个自动释放属性,遇到释放池释放,便调用方法开始释放.如果有其他情况,也可以在创建对象的时候在初始化后面加一个autorelease.
自动释放池其实就相当于一个数组,在建立释放池的时候会在栈里开辟一个空间,当池中有一个对象的时候,就给数组添加一个元素,以此类推,栈的特性是先进后出,所以在自动释放池中的对象也是从最后一个添加进来的开始逐一一次释放,所以如果你创建了很多ge类依次创建对象,并在类的.m文件按中在dealloc方法里nslog的话你就会很直观的看到这个情况.
现在的版本已经把arc自动加入了程序,所以现在开发者就可以不用自己管理内存了.但是初学者最好把arc关闭,自己进行内存管理,让自己更好的了解内存机制.
- ios自动释放池相关,autoreleasepool;
- Autoreleasepool自动释放池与内存相关
- ios自动释放池(autoreleasepool)
- 自动释放池autoreleasepool
- 自动释放池 (autoReleasePool)
- 自动释放池autoreleasepool
- @autoreleasePool 自动释放池
- 刀哥多线程自动释放池autoreleasepool
- Objective-C自动释放池AutoreleasePool详解
- @autoreleasepool 创建自动释放连接池(内存管理)
- 自动释放池的前世今生 ---- 深入解析 autoreleasepool
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 移动开发:iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 【iOS开发-34】自动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
- iOS开发自动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 利用域控设置启动脚本统一更改客户端administrator密码和添加客户端本地管理员账号
- 设定JFreeChart柱子上面的颜色
- 用户注册界面设置
- 看unix高级编程时遇到apue.h找不到的问题
- windows sdk 实现文件拖拽 不是使用mfc
- ios自动释放池相关,autoreleasepool;
- 对c&c++源文件和头文件分开的好处的一点认识
- 第十五天【java虐我千百遍,我待java如初恋】
- 虚函数
- what is SOA Gateway
- 【CSDN常见问题解答】Swing监听组合键
- Target-Action模式
- DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
- 快速排序法(二)