一次Analyze静态分析的思考

刚对项目进行Analyze分析,发现有段代码行报Value stored to ‘version’ during its initialization is never read ,如下图所示:

一次Analyze静态分析的思考_第1张图片

从代码逻辑上来看,感觉并没有什么问题。version只是个局部变量,初始化的时候便默认了APPDebugModelfalse的情况,反之才会重新赋值。仔细观察下会发现,进行Analyze时设置的APPDebugModel = true,就会出现当前这个Dead store问题。

 NSString *version = [NSString stringWithFormat:@"release-%@-%@",[[HDCommonTools sharedHDCommonTools] getAppVersionStr],[[HDCommonTools sharedHDCommonTools] getAppBuildVersionStr]];

回归代码分析,NSString stringWithFormat: 方法会在初始化时为version对象分配内存地址(假设为a),此时APPDebugModel = true,继续调用NSString stringWithFormat: 方法生成一个新的对象和内存地址(假设为b)指向version,从而导致之前分配的内存a闲置不被读取而白白浪费,也就是Dead store

为避免这个问题,对代码进行修改如下:

 NSString *version;
 if (APPDebugModel) {
    version = [NSString stringWithFormat:@"debug-%@-%@",[[HDCommonTools sharedHDCommonTools] getAppVersionStr],[[HDCommonTools sharedHDCommonTools] getAppBuildVersionStr]];
 }else {
    version = [NSString stringWithFormat:@"release-%@-%@",[[HDCommonTools sharedHDCommonTools] getAppVersionStr],[[HDCommonTools sharedHDCommonTools] getAppBuildVersionStr]];
 }

虽然是个逻辑上看没啥问题的问题,但却反映了思维的严谨性。写代码的时候,注意多分析多思考,千万不要为了省写else逻辑,而导致Dead store浪费内存。

你可能感兴趣的:(一次Analyze静态分析的思考)