__unsafe_unretained的使用

__unsafe_unretained的使用

我们一般很少用到__unsafe_unretained修饰词。但是在开源项目就会见到。

在介绍这个__unsafe_unretained之前,我们先来介绍下__weak。
__weak 表示的是对象的弱引用关系,__weak修饰的对象被释放后,指向对象的指针会自动置为空,也就是指向nil。
__unsafe_unretained表示的是弱引用关系,__unsafe_unretained修饰的对象被释放后,指针不会置为空,变成一个野指针,如果后续再访问这个对象就会crash。

那为什么有__weak还要用__unsafe_unretained呢?

使用__weak会消耗一定的性能,因为在用__weak修饰的对象是否被释放,在检查的时候需要一些信息。它相对应的有一个weak表。这个时候需要查找并置为nil。

而__unsafe_unretained不需要这么做。

什么时候用__unsafe_unretained?

例如:当对象A拥有对象B,A销毁B野销毁。这样点那个B存在,A也一定存在的时候,此时B要调用A的接口,就可以通过__unsafe_unretained 保持对A的引用关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值