IOS Block循环引用的内存泄漏问题

IOS 在MRC(非ARC)内存管理方式下,中如果Block调用了self的方法,那self的引用计数会被block +1, 如果处理不当会当值内存泄漏。

@implementation ISSChartLineViewController

– (void)dealloc

{

[_lineViewrelease];

[_changeDataButtonrelease];

[superdealloc];

}

– (void)viewWillAppear:(BOOL)animated

{

[superviewWillAppear:animated];

_lineView = [[ISSChartLineViewlineData:[[ISSChartDataGeneratorsharedInstance]lineData]];

_lineView.didSelectedLines = ^ISSChartHintView *(ISSChartLineView *lineView,NSArray *lines,NSInteger index,ISSChartAxisItem *xAxisItem) {

:lineView lines:lines index:index xAxisItem:xAxisItem];

};

//here need to optimization

[self.viewaddSubview:_lineView];

bringSubviewToFront];

}

如果这样写,回退到上一个界面的时候dealloc方式是不会调用的,,因为self被block应用在,这样会导致self一直放在内存中,修改如下即可:

– (void)viewWillAppear:(BOOL)animated

{

[superviewWillAppear:animated];

_lineView = [[ISSChartLineViewlineData:[[ISSChartDataGeneratorsharedInstance]lineData]];

__blocktypeof(self)weakSelf =self;

_lineView.didSelectedLines = ^ISSChartHintView *(ISSChartLineView *lineView,NSArray *lines,NSInteger index,ISSChartAxisItem *xAxisItem) {

return [weakSelfgetHintView:lineView lines:lines index:index xAxisItem:xAxisItem];

};

//here need to optimization

[self.viewaddSubview:_lineView];

bringSubviewToFront];

}

而做人的能力则会给你一百种机会。

IOS Block循环引用的内存泄漏问题

相关文章:

你感兴趣的文章:

标签云: