内存管理之自动释放池
2014-10-27 20:49
197 查看
Main.m
#import "Dog.h"
int main(int argc, const char * argv[])
{
/*________________________自动释放池的使用__________________________*/
/*
//方式一:
//创建dog对象
Dog *dog = [[Dog alloc] init]; //1
//创建自动释放池对象
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//将dog放入到池子中,注意:此时的dog的引用计数不变,还是1,等到池子释放的时候才会释放
[dog autorelease]; //1
NSLog(@"dog 还没有被释放");
//自动释放池释放,此时他会将池子中的每一个对象发送一条release消息
[pool release];
//drain 会将池子中的每一个对象发送一条release消息,但是池子没有销毁
// [pool drain];
//方式二:
@autoreleasepool { //等价于:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//作用域
Dog *dog1 = [[Dog alloc] init];
[dog1 autorelease];
} //等价于: [pool release];
*/
/*________________________自动释放池的嵌套__________________________*/
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
Dog *dog1 = [[Dog alloc] init];
dog1.name = @"大黄"; //大黄放入pool1
[dog1 autorelease]; //放入自动释放池
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
//创建dog2
Dog *dog2 = [[Dog alloc] init];
dog2.name = @"小黑"; //小黑放到pool2
[dog2 autorelease]; //放入自动释放池
[pool2 release];
[pool1 release];
return 0;
}
Dog.h
@interface Dog : NSObject
@property(nonatomic, copy) NSString *name;
Dog.m
- (void)dealloc
{
NSLog(@"%@ dog dealloc",_name);
[_name release];
[super dealloc];
}
#import "Dog.h"
int main(int argc, const char * argv[])
{
/*________________________自动释放池的使用__________________________*/
/*
//方式一:
//创建dog对象
Dog *dog = [[Dog alloc] init]; //1
//创建自动释放池对象
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//将dog放入到池子中,注意:此时的dog的引用计数不变,还是1,等到池子释放的时候才会释放
[dog autorelease]; //1
NSLog(@"dog 还没有被释放");
//自动释放池释放,此时他会将池子中的每一个对象发送一条release消息
[pool release];
//drain 会将池子中的每一个对象发送一条release消息,但是池子没有销毁
// [pool drain];
//方式二:
@autoreleasepool { //等价于:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//作用域
Dog *dog1 = [[Dog alloc] init];
[dog1 autorelease];
} //等价于: [pool release];
*/
/*________________________自动释放池的嵌套__________________________*/
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
Dog *dog1 = [[Dog alloc] init];
dog1.name = @"大黄"; //大黄放入pool1
[dog1 autorelease]; //放入自动释放池
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
//创建dog2
Dog *dog2 = [[Dog alloc] init];
dog2.name = @"小黑"; //小黑放到pool2
[dog2 autorelease]; //放入自动释放池
[pool2 release];
[pool1 release];
return 0;
}
Dog.h
@interface Dog : NSObject
@property(nonatomic, copy) NSString *name;
Dog.m
- (void)dealloc
{
NSLog(@"%@ dog dealloc",_name);
[_name release];
[super dealloc];
}
相关文章推荐
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 第六讲:Obj-C 内存管理4 - 自动释放池
- 七十三、基础框架(三十一)内存管理-自动释放池
- 【amazing cocos2d-x 3.0之十三】内存管理(1):引用计数(Reference Count)和自动释放池(AutoReleasePool)
- Objective-C学习之旅(六)----内存管理4----自动释放池
- ObjC(Objective-C)的内存管理之-自动释放池(autorelease pool)
- Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础
- OC--内存管理之自动释放,[NSMutableArray array]生成的自动释放数组被自动释放后引起的严重后果
- objective-C 的内存管理之-自动释放池(autorelease pool)
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- cocos2dx之内存管理的几个自动释放内存的宏及条件判断
- OC视频笔记(数组的内存管理)(OC自动释放池)
- objective-C 的内存管理之-自动释放池(autorelease pool)
- objective-C 的内存管理之-自动释放池(autorelease pool)
- 黑马程序员——OC学习之内存管理和自动释放池
- 内存管理以及Autorelease和自动释放池
- 七十七、基础框架(三十五)内存管理-一个关于自动释放池的示例
- objective-C 的内存管理之-自动释放池(autorelease pool)
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系