自动释放池autoreleasepool

本文详细介绍了如何使用自动释放池管理Objective-C中的对象生命周期,包括如何将对象放入池中,以及如何在方法中安全地初始化和使用对象,避免野指针错误。通过实例演示了对象在不同作用域中的生命周期变化,以及如何正确应用autorelease方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象存入到自动释放池中,当这个池子被销毁的时候,他都会对池子中的所有的对象进行一次release操作


1:怎么把对象存到池子中

//自动释放池,大括号代表池子的作用域,可以自己随意创建

//只有在自动释放池的作用域中调用对象的autorelease方法才能够正确地将对象放入到池子中


@autoreleasepool{

     Person *p = [Person alloc]init]; //不管这个对象是在autorelease之内创建的,还是在之外创建的,只要你在池子中调                                                         用了autorelease方法,这个对象就会被放入到池子中

    [p  autorelease];//autorelease的方法的作用只是将对象放入到池子中,然后返回一个self,并不会使retainCount-1。                                    autorelease的方法必须在池子中,一个对象只能加入一次。

                              对象加入到哪个autoreleasepoll,就在哪个autoreleasepool结束后retainCount-1


}//代表池子将要被销毁,对池子中的所有的对象进行一次release操作


2:autorelease应用

》1:如果在方法中创建一个对象,最好初始化为nil,防止出现野指针错误,如

-(Food *)chiefMakeFood

{

   //1

   Food  *food = nil;//可写成  Food  *food = [Food alloc]init];

   //0

   //[food release];//会发生野指针错误

     [food  autorelease];//

   return  food;

}

》2:给外界提供一个快速获得当前对象 的快捷方法,是类方法

+(Chief *)chief

{

         Chief   *chi = [[self  alloc]init]; //self:谁调用就指向谁

        [ chi  autorelease];

         return   chi;

}

在 @autoreleasepool{

     Chief *chi = [Chief chief];

    Food *food = [chi chiefMakeFood];


NSString *name = [NSString stringWithFormat:"%@",@"啦啦啦"];//都是autorelease

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值