開發遇到的坑之block

Yang1492955186752發表於2017-12-13

在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來獲取成員變數,因此也會造成強引用。

相關文章