【Objective-C】OC中自动释放池的基本概念和使用方法
2014-02-11 14:53
501 查看
自动释放池的基本概念 cocoa中有一个自动释放池(AutoreleasePool)的概念,顾名思义,它是可以存放一些实体的 集合,在这个自动释放池中的对象,是能够被自动释放的。NSObject类提供了一个autorelease 消息,当我们向一个对象发送一个autorelease消息时,这个对象就被放入到自动释放池。 创建自动释放池 @autoreleasepool{ //入池对5.0之后的写法 } NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init]; //入池对5.0之前的写法 [poolautorelease]; 自动释放池的销毁时间 当我们将一个对象发送了autorelease消息时,当子自动释放池销毁时,会对池中的每一个对象 发送一条release消息,以此来进行释放它们。 (一):下面来看实例:创建一个Person实例对象,然后加入到自动释放池中,向该实例对象发送一条autorelease消息, 来查看一下它的生命周期) @autoreleasepool{ //入池对5.0之后的写法 Person*tom=[[Personalloc]init]; [tomautorelease]; NSLog(@"poolexist"); } NSLog(@"pooldead"); (二):接着上面的例子,向该对象发送一条retain消息,看下声明周期 @autoreleasepool{ //入池对5.0之后的写法 Person*tom=[[Personalloc]init];//1 [tomautorelease]; [tomretain];//2 NSLog(@"poolexist"); NSLog(@"tom%ld",[tomretainCount]); [tomrelease];//1 NSLog(@"tom%ld",[tomretainCount]); (三):接着上面的例子,如果有多个自动释放池的问题,根据发送的autorelease消息来进行判断是 对象加入的那个自动释放池, @autoreleasepool{ Person*tom=[[Personalloc]init];//1 @autoreleasepool{ //入池对5.0之后的写法 [tomautorelease]; [tomretain]; NSLog(@"poolexist"); NSLog(@"tom1%ld",[tomretainCount]); } NSLog(@"pool1dead"); NSLog(@"tom2%ld",[tomretainCount]); } NSLog(@"pool2dead"); 【小结】: 1:自动释放池的数据结构 自动释放池是以栈的形式实现,当你创建一个新的自动释放池,它将会被添加到栈顶。接受autorelease 消息的对象将会呗放入栈顶 2:如何持有对象 当我们使用alloc,copy,retain对象获取一个对象时,我们需要负责显示的安排对象的销毁,其他方法获取的 的对象将交给自动释放池进行释放(单例模式除外) 3:release和drain的区别 当我们向自动释放池pool发送release消息,将会向池中临时对象发送一条release消息,并且自身也会呗销毁。 向它发送drain消息时,只会指定前者。 |
相关文章推荐
- 【Objective-C】OC中自动释放池的基本概念和使用方法
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
- 【Objective-C】OC中键值编码(KVC)的概念和使用方法
- 黑马程序员--Objective-C之--自动释放池的概念以及使用
- 【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
- [Objective-C]OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
- 【Objective-C】OC中集合基本概念和常用方法(NSSet)
- 【Objective-C】OC中集合基本概念和常用方法(NSSet)
- [Objective-C]OC中字典基本概念和常用方法
- 【Objective-C】OC中键值编码(KVC的概念和使用方法
- 【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法
- 【Objective-C】OC中键值编码(KVC)的概念和使用方法
- 【Objective-C】OC中键值编码(KVC)的概念和使用方法
- 【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法
- [Objective-C]OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)