内存管理之自动释放池

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];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值