autorelease,autoreleasepool基本使用
autorelease基本使用:
1>给对象发送一条autorelease消息,会将对象放到一个自动释放池中
2>当自动释放池也被销毁时,会对池子里面所有对象做一次release操作
3>调用完autorelease之后,对象计数器不变
autorelease的好处:
1>不用关心对象释放的时间
2>不用关心什么时候调用release
autorelease使用注意:
1>占用内存大的对象不要随便使用autorelease
2>占用内存小的对象使用autorelease,没有太大影响
autoreleasepool:在iOS程序运行时,会创建无数个池子,这些池子以栈结构存在(先进后出);当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池。
(一)基本用法
(1)会将对象放到一个自动释放池中
(2)当自动释放池被销毁时,会对池子里的所有对象做一次release
(3)会返回对象本身
(4)调用完autorelease方法后,对象的计数器不受影响(销毁时影响)
(二)好处
(1)不需要再关心对象释放的时间
(2)不需要再关心什么时候调用release
(三)使用注意
(1)占用内存较大的对象,不要随便使用autorelease,应该使用release来精确控制
(2)占用内存较小的对象使用autorelease,没有太大的影响
(四)错误写法
(1)连续调用多次autorelease,释放池销毁时执行两次release(-1吗?)
(2)Alloc之后调用了autorelease,之后又调用了release。
(五)自动释放池
(1)在ios程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的。
(2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中
(六)自动释放池的创建方式
(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
以上部分参考 文顶顶 博客