关于block的循环引用问题
来源:互联网 发布:json字符串转java对象 编辑:程序博客网 时间:2024/06/05 14:29
我们为什么会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放了,所以我们需要对Block进行copy,copy到堆中,以便后用。
当一个Block被Copy的时候,如果你在Block里进行了一些调用,那么将会有一个强引用指向这些调用方法的调用者,有两个规则:
- 如果你是通过引用来访问一个实例变量,那么将强引用至self
- 如果你是通过值来访问一个实例变量,那么将直接强引用至这个“值”变量
苹果官方文档里有两个例子来说明这两种情况:
上面第一种情况相当于用self.xxx来访问实例变量,所以强引用指向了self;第二种情况把实例变量变成了本地临时变量,强引用将直接指向这个本地的临时变量。大多数情况下,我们只用处理第一种情况就行了,因为第二种情况虽然会造成循环引用,但是临时变量很快就被释放了,不会造成真正的循环引用。要避免强引用到self的话,用__weak把self重新引用一下就行了:__weak ViewController *weakSelf = self;
0 0
- 关于Block循环引用的问题
- 关于block的循环引用问题
- 关于block循环引用的问题
- 关于block循环引用问题
- block 循环引用的问题
- Block的循环引用问题
- Block的循环引用问题
- block的循环引用问题
- Block的循环引用问题
- Block的引用循环问题
- block循环引用的问题
- 关于Block的copy和循环引用的问题
- 关于Block的copy和循环引用的问题
- 关于Block的copy和循环引用的问题
- 关于Block的copy和循环引用的问题
- 关于Block的copy和循环引用的问题
- 关于block的copy和循环引用问题
- iOS 中关于block 的循环引用问题
- 手机移动端WEB资源整合
- Stream转换List
- [从头学声学] 第200节 [机器小伟]的200岁生日
- java字符串匹配
- NKOI 3645 黑盒序列
- 关于block的循环引用问题
- class_start main 执行了啥?
- tomcat添加输出日志到指定文件
- 用MySQL实现微博关注关系的方案分析
- JPush服务器端源码参考
- C#域验证及遍历域帐号
- 深度学习基础(四)—— RBM(受限波尔滋曼机)
- android开启手机wifi热点和连接到wifi热点
- 修改adb端口号