如何避免在Block里用self造成循环引用
来源:互联网 发布:看网络直播用什么软件好 编辑:程序博客网 时间:2024/06/08 09:26
一般来说我们总会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放了,所以我们需要对Block进行copy,copy到堆中,以便后用。
当一个Block被Copy的时候,如果你在Block里进行了一些调用,那么将会有一个强引用指向这些调用方法的调用者,有两个规则:
- 如果你是通过引用来访问一个实例变量,那么将强引用至self
- 如果你是通过值来访问一个实例变量,那么将直接强引用至这个“值”变量
苹果官方文档里有两个例子来说明这两种情况:
上面第一种情况相当于用self.xxx来访问实例变量,所以强引用指向了self;第二种情况把实例变量变成了本地临时变量,强引用将直接指向这个本地的临时变量。大多数情况下,我们只用处理第一种情况就行了,因为第二种情况虽然会造成循环引用,但是临时变量很快就被释放了,不会造成真正的循环引用。要避免强引用到self的话,用__weak把self重新引用一下就行了,像这样:
0 0
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- block里的self,避免循环引用
- 如何避免block循环引用
- Masonry 对于block内部引用self会不会造成循环引用?
- 私有成员变量在block如何避免循环引用
- 使用block时如何避免循环引用
- IOS 如何避免Block的循环引用
- block里使用self引起循环引用的研究
- 为什么系统的block,AFN网络请求的block内使用self不会造成循环引用?
- Block如何避免self retain
- Block如何避免self retain
- Block 内部使用self 如何防止内存循环引用
- iOS开发---私有成员变量在block如何避免循环引用
- 避免block的循环引用
- virtual 析构函数作用
- iOS开发脚踏实地学习day10-PickerView
- 自定义View(三) switch开关按钮 ViewDragHelper的使用初级
- Smack 4.1.x升级指南
- 处理大数字BigInteger与BigDecimal
- 如何避免在Block里用self造成循环引用
- JavaScript简史和概述
- 内连接,外连接,交叉连接--数据库查询语句学习
- Android禁止横屏竖屏切换
- scala apply方法 笔记
- 学习JAVA--线程1
- dhcp server 配置
- 疯狂猜歌实现(11)—— 过关、通关界面及相关逻辑实现
- MySQL常用代码 笔记