自动释放池

是一种半自动的内存管理方式

autorealease方法:

-(instancetype)autorelease

此方法将对象放到自动释放池中,当自动释放池销毁时,池中的所有对象都会随之销毁。

常见的使用方式:

Person*p=[[[Perosnalloc]init]autorelease];

使用@autoreleasepool关键字来使用自动释放池

其后的{…}相当于自动释放池的生存期 ,如:

@autoreleasepool{Person*p=[[[Perosnalloc]init]autorelease];…}

好处:不用关心对象释放的时间、不用关心什么时候调用release


注意:

1)占用内存较大的对象尽量不要随意使用autorelease

2) @autoreleasepool可以嵌套

系统中有一个自动释放池的栈结构,autorelease方法是将对象放入到栈顶得池子中

3)不要多次调用autorelease,如:

[[[[Personalloc]init]autorelease]autorelease];

4)自动释放池销毁时会对池子中的对象release一次,也就是说autorelease方法并没有更改引用计数。

将autorelease方法封装在类对象方法中是一个比较好的做法

+(AMPerson*)person{//return[[[Personalloc]init]autorelease];return[[[selfalloc]init]autorelease];}


旧版本的自动释放池的使用:

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];…[poolrelease];

自Xcode5之后基本都是使用autorelease