众所周知,解决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.还是使用点语法去取变量值吧
*/
};