您的位置:首页 > 移动开发 > IOS开发

自动释放池的工作流程

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息