文档章节

autorelease和autoreleasepool应该知道的那些事

super_co
 super_co
发布于 2015/06/12 16:28
字数 294
阅读 4
收藏 0

一个Cocoa对象生命周期,有明确的轨迹

一 ,autorelease:

1.对象执行autorelease方法时会将对象添加到自动释放池中 

2.当自动释放池销毁时自动释放池中所有对象作release操作 

3.对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身

4.autorelease实际上只是把对象release的调用延迟了,对于对象的autorelease系统只是把当前对象放入了当前对应的autorelease pool中,当该pool被释放时([pool drain]),该pool中的所有对象会被调用Release,从而释放使用的内存。这个可以说是autorelease的优点,因为无需我们再关注他的引用计数,直接交给系统来做!

5.对于操作占用内存比较大的对象的时候不要随便使用,担心对象释放的时间太迟,造成内存高峰, 但是操作占用内存比较小的对象可以使用

二,atureleasepool

1.自动释放池存储于内存中的栈中遵循"先进后出"原则


© 著作权归作者所有

共有 人打赏支持
super_co
粉丝 1
博文 10
码字总数 7205
作品 1
东城
高级程序员
私信 提问
NSAutoReleasePool 讲解

Cocoa的内存管理主要依赖于Reference Counting, 而NSAutoReleasePool就是用来支持它的. autorelease pool中存放的对象会在其自身干枯(drain)时被release. 我们都知道当一个object的release方...

小怪兽551
2012/05/31
0
0
NSAutoReleasePool 讲解

好记性不如烂博客. 今天需要记录的是关于NSAutoReleasePool的理解.(大部分内容来自于iOS4.3 Library) Cocoa的内存管理主要依赖于Reference Counting, 而NSAutoReleasePool就是用来支持它的....

孙启超
2012/05/28
0
1
objective-C 中的内存管理

手动管理。下面这篇博文绝对能让你清晰很多。http://www.cocoachina.com/bbs/read.php?tid=15963 不过这里需要指出两点: 1.1 文中说你autorelease的对象会被放到一个nsmutablearray中,这个...

Megan_zhou
2013/07/29
0
0
Autorelease机制讲解

Autorelease机制是在iOS内存管理中的一员。在MRC中,是通过调用[obj autorelease]来延迟内存释放;在ARC中,我们已经完全不需要知道Autorelease就能很好地管理好内存。而在这背后,Objective...

国孩
08/18
0
0
ios内存管理(四):Autorelease技术

  前面章节提到内存释放时,经常会说到当超出变量作用域时,变量会被“自动”释放,其实这只是为了更加简单的说明这个过程。实际上,在ARC模式下是系统帮你自动插入了相应的release逻辑。这...

智小融
2017/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TensorFlow的基础概念02

TensorFlow的计算流图 import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#TensorFlow的计算模型,数据流图'''TensorFlow = Tensor + FlowTensor 张量 数据结构:多维数组Flo...

怪咖先生forever
8分钟前
1
0
大数据技术的发展趋势

大数据领域已经涌现出了大量新的技术,它们成为大数据采集、存储、处理和呈现的有力武器。这些技术下一步将如何发展?它们之中哪些技术将广为流行?又会诞生哪些新的技术? 技术趋向多样化,...

董黎明
24分钟前
6
0
藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所...

前端小攻略
26分钟前
2
0
关联更新,关联查询

关联更新 update A,B SET A.c1=B.c1,A.c2=B.c2 where A.id=B.id and ... update A inner join on A.id=B.id set A.c1=B.c1,A.c2=B.c2 where... 关联查询 交叉连接(cross join),内连接(inner ......

关元
29分钟前
3
0
django的环境搭建及启用

Pycharm社区版不像商业版那样可以直接创建django工程,需要通过一下步骤创建: 新建一个用于Django开发的虚拟环境 打开命令窗口 新建虚拟环境: conda create -n env_name python=3.6 查看系...

davidwbnu
30分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部