为什么系统的block,AFN网络请求的block内使用self不会造成循环引用?
来源:互联网 发布:淘宝客如何推广店铺 编辑:程序博客网 时间:2024/05/21 13:55
其实只要抓住循环引用的本质。所谓循环引用,是因为当前控制器在引用着block,而block又引用着self即当前控制器,这样就造成了循环引用。
关于这个问题,UIView和AFN还是不一样的。
首先循环引用发生的条件就是持有这个block的对象,被block里边加入的对象持有。当然是强引用。
所以UIView的动画block不会造成循环引用的原因就是,这是个类方法,当前控制器不可能强引用一个类,所以循环无法形成。
UIView中的block持有当前控制器,但是当前控制器中是没有持有UIView类的,没有形成循环.当动画结束时,UIView会结束持有这个block,如果没有别的对象持有block的话,block对象就会被释放掉,从而block会释放掉对self的持有,整个内存引用关系被解除.
AFNetworking是因为人家大神自己封装了一个completionBlock,不管你传进来是啥,都给你把循环引用打破。
这是较低版本的,AF3.0以上的好像没这个了 .
AFURLConnectionOperation 里的一个请求结束之后,setCompleteBlock会把block设置为nil,来打破循环引用 .
看图:
通用情况 : 在block本身不被self持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用weakself了.
0 0
- 为什么系统的block,AFN网络请求的block内使用self不会造成循环引用?
- block内self的循环引用的问题
- **ios 解决Block内用self循环引用的方法**
- block里的self,避免循环引用
- block里使用self引起循环引用的研究
- 8.block中使用self的循环引用问题
- Masonry 对于block内部引用self会不会造成循环引用?
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- 如何避免在Block里用self造成循环引用
- Block的循环引用
- Block的循环引用
- 循环引用的block
- block的循环引用
- Block的循环引用
- Block的循环引用
- day78_babasport第四天
- 使用Flume+Kafka+SparkStreaming进行实时日志分析
- oracle ogg formatascci字段出现null问题
- Sqlite入门基础1
- Tensorflow-报错解决方案
- 为什么系统的block,AFN网络请求的block内使用self不会造成循环引用?
- IOC 在Mvc中的使用
- (40):谨慎设计方法签名
- 蓝桥杯:2n皇后问题
- C++:堆和栈的区别
- MongoDB无法启动,如何恢复数据?
- Ztree取消全部选择 cancelSelectedNode无效
- 第八届河南省程序设计大赛D引水工程(最小生成树)
- cnn怎么用在自然语言处理(NLP)中