循环引用的问题
1.典型的场景是 viewcontroller 持有一个tableview,tableView 持有一个刷新的Block,刷新的block 持有self, 做法就是内部生命一个 weakSelf,里面再声明一个strongSelf去处理,我们这里更建议里面用下面去定义
__strong typeof(weakSelf) self = weakSelf;
这里的好处是什么呢? 是预防如果里面搞个下面的情况,有时间写着写着就出错了,就写成self,又造成循环引用,如果按照上面的写法就是一个self,就不会出现这种情况。
__strong typeof(weakSelf) strongSelf = weakSelf;
2.问题如果里面的网络请求套着多层网络请求,在多层的block里面,会造成循环引用吗?为什么? 不会造成循环引用,是因为里面的引用都是 最开始声明的 strongself 这一个局部变量,局部变量和这个block 之间不论再怎么嵌套都不会造成循环引用。
3.在解决循环引用时候,strongself里面调用的所有层级的方法,都不能使用 _属性名 这样去使用属性,因为 _属性 本质是用当前控制器的self 去访问属性,不论他是他的多少层方法,都会造成循环引用。