ARC中的block

在arc之后,block变得更加简单了。

只有global和heap block了,原来的stack block没有了。


从log里面清楚的看到,原来非arc的stack block变成了mallocblock,也就是常说的堆block。

然后我们看看car对象的释放:


很清楚car的dealloc的调用是在Block2释放以后。那么也就是说,我们在Block2=Block1这个地方,car被arc引用计数+1了,相当于car的生命周期延长到了block2对象了。所以,只有block2释放了,car对象才会释放。可以验证一下,我们把Block2 = Block1这行代码去掉。


没有问题,在Block1和car对象的作用域结束那里,car就被释放了,而不像之前的在Block2后面才释放。所以说,arc还是很牛逼的,它已经帮助处理好了oc对象的引用问题,不像非arc下面,需要程序员自己去控制,如果是stack block的话,要千万小心,需要自己控制生命周期,如果是heap block的话,就需要自己调用Block_copy和Block_release来进行控制。arc就简单多了,自动处理好了,如果block里面引用了外面的变量,直接就是堆block了,如果是oc对象,也不用关心内存释放问题,就算是block传递出去了,也无需关心,都自动帮你处理好了,像上面的例子,如果block传递出来了(到car对象作用域外面),那么car对象的生命周期也被延长了,实际就是arc情况下,编译器做了些手脚,插入了引用计数增加的代码。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值