ARC所有权修饰符--__weak修饰符

ARC所有权修饰符–__weak修饰符

在上篇ARC所有权修饰符–__strong修饰符中,看起来通过__strong修饰符就可以完美的管理内存了,但是仅仅通过__strong修饰符是不能解决“循环引用”问题的。
这里写图片描述
循环引用容易发生内存泄漏。所谓的内存泄漏就是当废弃的对象在超出其生存周期后继续存在。

怎样才能避免循环引用呢?既然有strong,就应该有weak。也就是说,使用__weak修饰符可以避免循环引用。
__weak与__strong相反,提供弱引用,弱引用不能持有对象实例。

id __weak obj = [[nsobject alloc]init];
//编译器会发生警告,(将自己生成并持有的对象赋值给附有__weak修饰符的变量obj),写成下面这样就可以了:
{
id obj = [[nsobject alloc]init];
id __weak obj1 = job;

}

因为带__weak修饰符的变量(即弱引用)不持有对象,所以在超出其变量的作用域时,对象即被释放。将可能发生循环引用的类成员变量改成附有__weak修饰符的成员变量的话,就可以避免循环引用。

__weak修饰符还有另一个有点,在持有某对象的弱引用时,若该对象被废弃,则此弱引用将自动失效且处于nil被赋值的状态(空弱引用)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值