objective-c内存管理ARC关键字概述

简单来讲,只要记住strong和weak就可以了,局部变量使用__strong和__weak,至于unsafe_unretained是之前低版本时对weak不支持时的weak替代方案,weak比unsafe_unretained安全。

一般情况下都用strong,可能存在循环引用或者只是想获取一下对方的指针,并不想因获取而使对方无法释放内存的情况下,使用weak。

对于局部变量,默认是strong,所以一般不用管,只有属性变量,因为默认是unsafe_unretained的,因此一般都要去指定为weak或者strong。

所以总结起来就一点:属性变量要指定strong或weak。

1.strong

strong与之前的retain差不多,可以增加属性引用计数的值。在不需要的时候,需要手动设置属性为nil。

2.weak
weak是iOS5及以上才支持的修饰符。它被称为“归零弱引用”。可以只是持有指针而不增加引用计数来避免循环保留。当指针指向的内存被销毁后,声明weak的属性指针会自动置为nil,这也是它被称为归零弱引用的原因。

3.unsafe_unretained
对于iOS5以下版本,并不支持ARC中的weak声明,可以用unsafe_unretained声明来代替weak。unsafe_unretained同样也是不增加引用计数的值,但它没有“归零”的动作,需要手动操作,一般作为支持iOS5以下weak的替代方案。

4.__autoreleasing

对于函数中作为函数返回值的局部变量,需要使用__autoreleasing声明该局部变量;当你想传一个未初始化地对像引用到一个方法当中,在此方法中实始化此对像,那么这种情况函数声明时需要在变量前加上__autoreleasing,如- (void) generateErrorInVariable:(__autoreleasing NSError **)paramError

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值