objective-c的ARC机制,strong和weak

ARC是iOS5后引入的,这是编译器特性而不是OC的语言特性。

ARC的实质就是由编译器自动实现retain,release,dealloc。其实质还是引用计数,只是我们不需要显示的去调用引用计数相关函数而已。


在ARC后有四种所有权修饰符:

__strong,__weak,_unsafe_unretained,_autoreleasing。


__strong表示强引用,可以持有对象。

__weak表示弱引用,不能持有对象。

所谓的持有对象,就是当强引用被赋值后,对象的引用计数会加1。而弱引用则不会,它只是简单的把指针地址赋值。所以这样的后果就是,如果强引用指向别的值或者nil的时候如果原对象的引用计数为0时,这个对象就被销毁了。而弱引用所指向的原对象则不会。 

弱引用可以避免循环引用。

弱引用还有一个好处,如果弱引用正指向的对象被销毁了,编译器会为其置为nil。所以可以通过检测弱引用是否为nil来判断其是否有效。


ARC下属性声明属性与所有权修饰符的对应关系:


属性声明的属性              所有权修饰符

assign                             __unsafe_unretained

copy                         |        __strong(但是赋值的是被复制的对象)

retain                             __strong

strong                      |       __strong

unsafe_unretained |       __unsafe_unretained

weak                        |       __weak


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值