Objective-C内存管理之autorelease(二)

上一章节提到了autorelease,千万不要把这东西与ARC混淆了,它更像C语言中自动变量(局部变量)所具有的特性。当超出其作用域时,对象实例将会自动调用release。与C语言不同的是,编程人员需要自己设定变量的作用域。
autorelease的具体使用方法如下:

  • 生成并持有NSAutoreleasePool对象
  • 调用已分配对象的autorelease实例方法
  • 废弃NSAutoreleasePool对象
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    id obj = [[NSObject alloc] init]; 
    [obj autorelease];
    //在这里,obj会被添加到pool中,由pool统一进行一次release 
    [pool drain]; 
}

NSAutoreleasePool对象的生存周期相当于C语言变量的作用域。对于所有调用过autorelease实例方法的对象,在废弃NSAutoreleasePool对象时,都将调用release实例方法。

Cocoa框架中,主循环或者其他程序可运行的地方,已有对NSAutoreleasePool对象进行生成、持有和废弃。因此,开发者不一定会使用到NSAutoreleasePool对象进行开发。尽管如此,但如果大量产生autorelease对象,不对NSAutoreleasePool进行废弃的话,这些对象也不会释放,这就会造成内存不足的情况。所以,有必要在适当的地方生成、持有或废弃NSAutoreleasePool对象。

此外,建议用@autorelease代替NSAutoreleasePool,与其原理基本相同:

{
    @autorelease{
        ......
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值