iOS 内存管理arc
2015-05-08 17:25
190 查看
http://www.tekuba.net/program/346/
ios自动释放池(autoreleasepool
#import <Foundation/Foundation.h>
@interface Test : NSObject
@end
@implementation Test
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Test *test = [[Test alloc]init];
NSLog(@"对象初始化以后的引用计数为:%x",[test retainCount]);
[pool drain];
NSLog(@"释放自动释放池以后,对象的引用计数为:%x",[test retainCount]);
pool = [[NSAutoreleasePool alloc]init];
[test autorelease];
NSLog(@"将对象添加到自动释放池以后的引用计数为:%x",[test retainCount]);
[test retain];
NSLog(@"对象进行retain后的引用计数为:%x",[test retainCount]);
[pool drain];
NSLog(@"释放自动释放池以后,对象的引用计数为:%x",[test retainCount]);
[test release];
return 0;
}
通过使用autorelease,该对象就被放入自动释放池,系统自动跟踪每个对象的使用情况,并在释放自动释放池时,释放池中所有对象。
上面这一段代码是书上的,但很好说明了autoreleasepool的用法,以前老师们常说不能死读书的,应是多思考,自己动手写实例,多提问,多讨论吧
这里我把的思考写出来,供大家参考:
1.autoreleasepool只能放也池中的对象起作用,我们手工管理内存它不管,也就是说手工或自动(系统)两套不同的机制;
2.加入用[test autorelease],释放用pool drain
4.aotoreleasepool到达底什么时候释放?是pool drain后就释放了吗?
对于每一个Runloop, 系统会隐式创建一个Autorelease pool(自然会有多个Autorelease pool),这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。
那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop。(暂没有在官方文档中找到这个解释)
ios自动释放池(autoreleasepool
#import <Foundation/Foundation.h>
@interface Test : NSObject
@end
@implementation Test
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Test *test = [[Test alloc]init];
NSLog(@"对象初始化以后的引用计数为:%x",[test retainCount]);
[pool drain];
NSLog(@"释放自动释放池以后,对象的引用计数为:%x",[test retainCount]);
pool = [[NSAutoreleasePool alloc]init];
[test autorelease];
NSLog(@"将对象添加到自动释放池以后的引用计数为:%x",[test retainCount]);
[test retain];
NSLog(@"对象进行retain后的引用计数为:%x",[test retainCount]);
[pool drain];
NSLog(@"释放自动释放池以后,对象的引用计数为:%x",[test retainCount]);
[test release];
return 0;
}
通过使用autorelease,该对象就被放入自动释放池,系统自动跟踪每个对象的使用情况,并在释放自动释放池时,释放池中所有对象。
上面这一段代码是书上的,但很好说明了autoreleasepool的用法,以前老师们常说不能死读书的,应是多思考,自己动手写实例,多提问,多讨论吧
这里我把的思考写出来,供大家参考:
1.autoreleasepool只能放也池中的对象起作用,我们手工管理内存它不管,也就是说手工或自动(系统)两套不同的机制;
2.加入用[test autorelease],释放用pool drain
3.autoreleasepool不是系统的垃圾收集功能(Garbage Colliction)
4.aotoreleasepool到达底什么时候释放?是pool drain后就释放了吗?
对于每一个Runloop, 系统会隐式创建一个Autorelease pool(自然会有多个Autorelease pool),这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。
那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop。(暂没有在官方文档中找到这个解释)
相关文章推荐
- IOS 5编程 内存管理 ARC技术概述
- iOS开发--内存管理--学习手动内存管理暂时抛弃ARC以及retain/assign知识
- IOS内存管理 ARC技术概述
- iOS:属性、修饰词(内存管理) 及其对应成员变量 、ARC
- IOS 高级内存管理 ARC (Automatic Reference Counting) 原理分析
- iOS 非ARC基本内存管理系列 2-多对象内存管理(1)
- IOS ARC内存管理,提高效率避免内存泄露
- IOS ARC内存管理,提高效率避免内存泄露
- 【转】iOS夯实:ARC时代的内存管理
- 【iOS开发-33】学习手动内存管理暂时抛弃ARC以及retain/assign知识——iOS工程师面试必考内容
- iOS非ARC内存管理摘要
- iOS基础之内存管理(一)——ARC下的内存泄漏
- ios arc下内存管理
- iOS开发ARC内存管理技术要点
- IOS 5编程 内存管理 ARC技术概述 .
- iOS开发ARC内存管理技术要点
- iOS 下ARC的内存管理机制
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
- iOS开发日记45-ARC和内存管理
- IOS ARC内存管理,提高效率避免内存泄露