静态检测内存泄露Analyze--Value stored to 'dataArr' during its initialization is never read

最近项目快要结束了,今天就使用Analyze检测了一下看是否有内存泄漏!这一检测,好吧!应用中发现了好多一些细节的问题导致的内存泄漏,就贴出来供大家参考下。

项目里面我又这样一段代码:

    NSMutableArray *tempMutArr = [NSMutableArray arrayWithCapacity:0];

    if ([self.clickedButtonTpye isEqualToString:KClickedButtonTypeLast]) {

        tempMutArr = self.lastDataSourceArr;
    }else{

        tempMutArr = self.hotDataSourceArr;
    }

本来这样写的代码觉得是无可厚非的,但是用Analyze检测后报出了下面的错误:

Value stored to 'dataArr' during its initialization is never read

仔细看了代码后才发现代码存在一个细节上的问题,也正是这个细节导致的内存泄漏。在项目里我的self.lastDataSourceArr和self.hotDataSourceArr都是已经初始化过的可变数组,但是在if里我又重新初始化了一个新的可变数组,并且把之前已经初始化过的可变数组赋值给了它,这就是内训泄漏的问题所在,看似代码没有大的问题,但是其实已经造成了内存泄漏。原因是:因为self.lastDataSourceArr和self.hotDataSourceArr是已经创建并且分配过内存的可变数组了,
但是我把这些数组又赋值给了重新创建并分配了内存的可变数组tempMutArr,所以这样就出现了一个数据源却申请了两块内存的情况,那么就存在一块内存空闲了,所以就存在了内存泄漏。

其实本意很简单,就是想把两个可变数组分情况赋值给可变数组tempMutArr,那么我们完全可以这样做:

    NSMutableArray *tempMutArr;

    if ([self.clickedButtonTpye isEqualToString:KClickedButtonTypeLast]) {
        tempMutArr = self.lastDataSourceArr;
    }else{
        tempMutArr = self.hotDataSourceArr;
    }

这样只做了一个可变数组tempMutArr的声明,不需要给它分配实际内存,就可以赋值了,其实只是声明了这样一个对象,使其持有对原有数据对象的引用即可。

你可能感兴趣的:(内存泄漏,analyze,内存检测,Analyze报错)