对autorelease的理解
来源:互联网 发布:js判断平年闰年的方法 编辑:程序博客网 时间:2024/05/23 19:17
一.对于autorelease pool本身,会在什么条件下会被释放
1.手动释放Autorelease pool
2)Runloop结束后自动释放
二.对于autorelease pool内部的对象,会在什么条件下被释放
在retain == 0的时候释放
注意:autorelease结束,只是对释放池中的对象release一次,对象并不一定会被释放
三.autorelease的原理
要搞懂具体原理,则要先要搞清楚autorelease 何时会创建。 我们的程序在main()调用的时候会自动调用一个autorelease,然后在每一个Runloop, 系统会隐 式创建一个Autorelease pool,这样所有的release pool 会构成一个象CallStack一样的一个栈式 结构,在每一个Runloop 结束时,当前栈顶的Autorelease pool(main()里的 autorelease)会被 销毁,这样这个pool 里的每个Object会被 release。
可以把 autorelease pool理解成一个类似父类与子类的关系,main()创建了父类,每个Runloop 自 动生成的或者开发者自定义的autorelease pool 都会成为该父类的子类。当父类被释放的时候,没有被释放的子类也会被释放,这样所有子类中的对象也会收到release 消息。 那什么是一个Runloop 呢?一个 UI事件,Timer call, delegate call,一个鼠标事件,键盘按 下(MAC OSX),或者iphone上的触摸事件,异步http 连接下后当接收完数据时,都会是一个新的Runloop。 一般来说,消息循环运行一次是毫秒级甚至微秒级的,因此autorelease的效率仍然是非常高的,确实是一个巧妙的设计。
例题:
NSObject *temp = [[[NSObjectalloc]init]autorelease];请问temp什么时候会被释放
答:temp的retainCount为0时,会被释放
- 对autorelease的理解
- 对cocos2d 之autorelease\ratain\release的理解
- 对cocos2d 之autorelease\ratain\release的理解
- 【cocos2dx】对cocos2d 之autorelease\ratain\release的理解
- 对cocos2d 之autorelease\ratain\release的理解
- 理解Objective-C的autorelease
- 理解Objective-C的autorelease
- iOS Autorelease的深入理解
- 对Objective-C中的autorelease池使用的几点理解
- 对iOS中内存处理的一些理解(retain,copy,assain,release,autorelease)
- 理解autorelease
- 理解autorelease
- 理解autorelease
- 理解autorelease
- autorelease 理解
- 关于autorelease和release的理解
- autorelease pool 和 Runloop的理解
- 关于autorelease pool一个较好的理解
- error LNK2019: 无法解析的外部符号 _main
- 微信分享自定义图片
- ASP 中如何判断PC用户访问还是手机用户访问
- mapreduce之combiner
- 浅析内存对齐
- 对autorelease的理解
- 依弗科(上海)机电设备有限公司
- dbca silent 的区别 11.2.0.3.0 11.2.0.4.0
- 《iOS Human Interface Guidelines》——Live Photos
- 【C/S】SCM初来乍到
- WebView
- android 的injustdecodebounds
- BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化
- C语言排序