block循环引用

本文介绍了Objective-C中的Block循环引用问题及其解决方案。循环引用导致对象无法释放,通过弱引用(weak)和使用完成后置为nil可以有效防止。文章提供两种方法:1) 使用weakSelf打破循环引用;2) block使用完毕后设为nil。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自从 block 横空出世,它本身就封装了一段代码当做变量,Apple 导入 block 语法之后就大幅改变了撰写 Objective-C 语言的方法。
block 是Cocoa/Cocoa Touch Framework 中的匿名函式(Anonymous Functions)的实作。所谓的匿名函式,就是一段 具有物件性质的程式码,这一段程式码可以当做函式执行,另一方面,又可以当做物件传递;因为可以当做物件传递,所以可以让某段程式码变成是某个物件的某个 property,或是当做 method 或是 function 的参数传递,就是因为这种特性,造成最常使用 block 的时机,就是拿 block 实作 callback。

循环引用是指对象间相互强引用了对方,而导致双方都无法被释放。
block的循环引用,即如果我们在block中调用self,那么就产生了循环引用。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

循环引用会造成APP的内存泄漏、消耗变高,使APP性能变差,用户体验不好,更坏的情况是造成APP闪退。

如何防止循环引用?
方法1 尽量不要在block中使用self,避免不了的话,我们可以使用weak(弱引用),用weak替代strong,打断循环引用!!!
方法2 block使用完成后,即设置为nil,打破循环引用!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值