MRC内存管理2自动释放池

  // autorelease
      
    // 示例1.
    Person *person = [[Person alloc]init];
//        release 功能立即减1
//        autorelease 延迟减1 将对象放入池子中,返回一个self
        [person autorelease];
    } // 代表池子将要销毁,对池子中所有的对象进行‘一次’release操作


    //示例2. 自动释放池可以随意创建
//    不管这个对象是在池子中还是在池子外创建的,只要在池子中调用了autorelease 就会把对象放入到池子中,随着池子的销毁而执行一次release操作
    
    Person *person1 = [[Person alloc]init];
    @autoreleasepool {
        [person1 autorelease];
    }

//    示例3.
    Person *person2 = [[Person alloc]init];
    [person2 autorelease];
    
    @autoreleasepool {
        
    }
    // 只有在自动释放池内调用了autorelease方法,才能够正确的将对象放入池子


//    示例4.
    Person *person4 = [[Person alloc]init];
    @autoreleasepool {
        [person4 autorelease];
//        [person4 autorelease];调用两次 重复释放  野指针错误
        
//     示例5.
        Person *person5 = [[Person alloc]init];
        @autoreleasepool {
            @autoreleasepool {
                [person5 autorelease];
            }
        }

   //     示例6.
        Person *person6 = [[Person alloc]init];
        @autoreleasepool {
//            [person6 autorelease]; 栈的原理 谁先销毁谁释放对象
            @autoreleasepool {
                [person6 autorelease];
            }
        }



autorelase在MRC中的用法等

// 创建chief
+ (id)chief {
    Chief *chief = [[[[self class] alloc]init]autorelease];
    return chief; // 类方法
}
// 创建food
- (Food *)chiefMakeFood {
    Food *food = [[[Food alloc]init]autorelease];
    food.name = @"辣条炒饭";
    return food;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值