美文网首页
block循环引用的一种特殊形式及解决方法

block循环引用的一种特殊形式及解决方法

作者: AnnieAri | 来源:发表于2017-02-20 12:01 被阅读0次

众所周知,解决block循环引用最常用的方式就是 使用__weak typeof(xx) name = xx; 解决
今天遇到个神奇的问题 明明已经使用了weakSelf了 但是控制器在pop后怎么也释放不了
最后发现是在block内使用了带下划线的变量去取值导致了block对控制器的强引用

//A中有对象b 和成员变量x  对象b中有block c
A *a = [A new];
// a.b  a.b.c   a.x
__weak typeof(A)  wa = A;
a.b.c = ^{
  //注意 使用wa去操作的是可以的 
[wa.b action];  
[wa.x action];
/**
错误用法
这是在A的.m内操作  所以可以使用_b   _x
但是如果在block中使用_b 或者_x的话
那么这个block 其实会对a 有强引用的  如此__weak就没有用了 最后a这个对象怎么也释放不了
解决方法: 1.想销毁之前把这个block置为nil 2.还是使用点语法去取变量值吧
*/
  
};

相关文章

网友评论

      本文标题:block循环引用的一种特殊形式及解决方法

      本文链接:https://www.haomeiwen.com/subject/lxgswttx.html