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

 

 

以上部分参考 文顶顶 博客

原文地址:https://www.cnblogs.com/sleblogs/p/5528701.html