一次Analyze静态分析的思考

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

从代码逻辑上来看,感觉并没有什么问题。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浪费内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。