眾所周知,解決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.還是使用點語法去取變量值吧
*/
};