Autorelease自动释放池

来源:互联网 发布:深入java虚拟机电子书 编辑:程序博客网 时间:2024/06/05 16:59

Autorelease自动释放池

  • (一)基本用法

(1)会将对象放到一个自动释放池中
(2)当自动释放池被销毁时,会对池子里的所有对象做一次release
(3)会返回对象本身
(4)调用完autorelease方法后,对象的计数器不受影响(销毁时影响)

  • (二)好处

(1)不需要再关心对象释放的时间
(2)不需要再关心什么时候调用release

  • (三)使用注意

(1)占用内存较大的对象,不要随便使用autorelease,应该使用release来精确控制
(2)占用内存较小的对象使用autorelease,没有太大的影响

  • (四)错误写法

(1)连续调用多次autorelease,释放池销毁时执行两次release(-1吗?就只执行一次release)
(2)Alloc之后调用了autorelease,之后又调用了release。

  • (五)自动释放池

(1)在ios程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的。
(2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中(距离对象最近的释放池)
(3)自动释放池原理:一个双向链表

  • (六)自动释放池的创建方式

(1)ios 5.0以前的创建方式
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
““““““““`
[pool release];//[pool drain];用于mac
(2)Ios5.0以后
@autoreleasepool
{//开始代表创建自动释放池
·······
}//结束代表销毁自动释放池

  • (七)Autorelease注意

(1)系统自带的方法中,如果不包含alloc new copy等,则这些方法返回的对象都是autorelease的,如[NSDate date];
(2)开发中经常会写一些类方法来快速创建一个autorelease对象,创建对象时不要直接使用类名,而是使用self

0 0