开发遇到的坑之block

166 阅读1分钟

在block中用_var对成员变量赋值,一样会造成retain cycle,必需使用weakSelf.var = xxx 才不会造成内存泄漏 具体如图

_chartView.block = ^(NSInteger index){
//       _seletedButtonIndex = index;
weakSelf.seletedButtonIndex =  index;
[weakSelf configureGridView];

[weakSelf requestIncomeData];
};

在我最初的理解中,_seletedButtonIndex是不会调用[self seletedButtonIndex]这个getter的,所以不应该会造成对self的强引用,直到项目中内存泄漏,最终定位到这句代码的时候,整个人是懵逼的。 这句代码到底强引用了self没,我得调查调查。

//更新 用clang把代码转换成c++后发现

QQ20160718-0.png

虽然使用的是_var的形式访问成员变量,但是最后还是通过self + ivar来获取成员变量,因此也会造成强引用。