采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好如下图的这个解决方案,对于循环引用不是还是self强持有block,block强持有self么?不应该是使用__weak __typeof(self) weakSelf = self;来破除循环引用么?
没太理解您说的因为array是strong类型的,所以会循环引用 那如果是一个常量age呢用assin修饰,在block中调用self.age就不会造成循环引用?
_array是self的成员变量。不加weak的情况下使用_array会造成block对self的强引用,而block又作为self的成员变量,所以会循环引用。有很多同学会不理解一个类持有的block对象的执行体中引用类的成员变量为什么会循环引用。前面也从源码角度分析了block在编译后对截获变量的处理,实际上就是引用self
非常感谢!
那像提问者说的那样 使用 __weak __typeof(self) weakSelf = self 是不是也可以
是可以的,weakSelf后,通过weakSelf.array 来调用。 老师的解答真的让人头疼,课程中讲的不够清晰也就算了,对于一些关键的疑惑点解答的也不全面
老师你前边说过,局部对象会连同修饰符一同被截获,这里的_array是属于局部变量吗?为什么它属于局部对象,局部变量的定义不应该是出大括号失效吗?
局部对象,或者类的属性(对象),都会被截获,这里的array是类的属性
登录后可查看更多问答,登录/注册
从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系
1.3k 11
1.9k 9
1.2k 9
1.0k 8
967 8