自动释放池的工作流程
2016-01-30 16:56
399 查看
#import <Foundation/Foundation.h>
#import "RetainTracker.h"
int main(int argc,
const char * argv[]) {
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool
alloc] init];
RetainTracker *tracker;
tracker = [RetainTracker
new]; //count 1
[tracker retain];
//count 2
[tracker autorelease];//count still 2 autorelease方法是将tracker放到自动释放池中,所以保留计数器的值不会变
[tracker release];// count 1
NSLog(@"releasing pool");
[pool release];
// NSAutoreleasePool也是一个普通对象,遵从相同的内存管理规则,所以[pool release]使pool = 1减1就成0了,这就销毁了自动
释放池
当保留技术为0时,自动调用dealloc方法
@autoreleasepool {
RetainTracker *tracker2;
tracker2 = [RetainTracker
new]; // count 1
[tracker2 retain];
// count 2
[tracker2 autorelease];
// count 2
[tracker2 release];
// count 1
NSLog(@"auto releasing pool");
}
return 0;
}
#import "RetainTracker.h"
int main(int argc,
const char * argv[]) {
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool
alloc] init];
RetainTracker *tracker;
tracker = [RetainTracker
new]; //count 1
[tracker retain];
//count 2
[tracker autorelease];//count still 2 autorelease方法是将tracker放到自动释放池中,所以保留计数器的值不会变
[tracker release];// count 1
NSLog(@"releasing pool");
[pool release];
// NSAutoreleasePool也是一个普通对象,遵从相同的内存管理规则,所以[pool release]使pool = 1减1就成0了,这就销毁了自动
释放池
当保留技术为0时,自动调用dealloc方法
@autoreleasepool {
RetainTracker *tracker2;
tracker2 = [RetainTracker
new]; // count 1
[tracker2 retain];
// count 2
[tracker2 autorelease];
// count 2
[tracker2 release];
// count 1
NSLog(@"auto releasing pool");
}
return 0;
}
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- IOS开发代码分享之获取启动画面图片的string
- OC - 9.基于Quartz2D绘制下载进度条(demo)
- IOS开发之路--C语言数组和字符串
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic
- IOS开发代码分享之设置UISearchBar的背景颜色
- iOS和tvOS游戏按需加载资源简介
- ios开发之环境搭建-01
- 在开发iOS程序时对日期处理的总结
- oc 的一些概念
- iOS开发——keychain的使用
- iOS Graphics Technologies iOS 图形技术
- iOS开发异常错误总结
- [代码例程] iPhone开发入门(7)--- 从C/C++语言到Objective-C语
- IOS 面试习题 Object-C
- objective-c block 讲解
- 学习Objective-C:入门手册