码迷,mamicode.com
首页 > 其他好文 > 详细

29-oc自动释放池

时间:2016-03-04 21:00:31      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

autorelease基本概念

什么是自动释放池?

autorelease是一种支持引用计数的内存管理方式,只要给对象发送一条autorelease消息,会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作

 


 

自动释放池的优点是什么

不用再关心对象释放的时间

不用再关心什么时候调用release

 


 

简述自动释放池的原理

autorelease实际上只是把对release的调用延迟了,对于每一个autorelease,系统只是把该 Object放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用release。

 


 

如何使用自动释放池?(用代码书写)

基本使用

1)方法一:

NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];

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

[autoreleasePool release];

2)方法二:

@autoreleasepool

{

    // 创建一个自动释放池

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

} // 销毁自动释放池(会给池子中所有对象发送一条release消息)

 


 

自动释放池注意事项

在自动释放池中创建了对象, 一定要调用autorelease,才会将对象放入自动释放池中

一个程序中可以创建N个自动释放池, 并且自动释放池还可以嵌套

不要再自动释放池中使用比较消耗内存的对象, 占用内存比较大的对象

尽量不要再自动释放池中使用循环, 特别是循环的次数非常多, 并且还非常占用内存

千万不要写多次autorelease

一个alloc/new对应一个autorelease或者release


 

自动释放池是以什么形式存储的

如果存在多个自动释放池的时候, 自动释放池是以"栈"的形式存储在堆区

栈的特点: 先进后出

29-oc自动释放池

标签:

原文地址:http://www.cnblogs.com/wc-Home/p/5243309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!