block对于属性的截获导致循环引用的问题
来源:7-5 Block循环引用相关面试问题&面试总结

鹤笑天
2020-03-31
老师,您好如下图的这个解决方案,对于循环引用不是还是self强持有block,block强持有self么?不应该是使用__weak __typeof(self) weakSelf = self;来破除循环引用么?
没太理解您说的因为array是strong类型的,所以会循环引用
那如果是一个常量age呢用assin修饰,在block中调用self.age就不会造成循环引用?
写回答
2回答
-
_array是self的成员变量。不加weak的情况下使用_array会造成block对self的强引用,而block又作为self的成员变量,所以会循环引用。有很多同学会不理解一个类持有的block对象的执行体中引用类的成员变量为什么会循环引用。前面也从源码角度分析了block在编译后对截获变量的处理,实际上就是引用self
132021-10-07 -
慕UI9212626
2021-05-22
老师你前边说过,局部对象会连同修饰符一同被截获,这里的_array是属于局部变量吗?为什么它属于局部对象,局部变量的定义不应该是出大括号失效吗?
012021-10-07
相似问题
关于block循环引用问题
回答 1
block截获property属性对象
回答 2