3

当我通过版本 252 检查器二进制文件运行我的代码时,没有分析错误。但是,当我更改为使用最新的 253 检查器时,它会返回大量错误,所有这些都没有任何意义。例如,以下是扫描构建脚本完成后在我的 Safari 浏览器中显示的错误图像:

Clang 静态分析器错误

这是一个非常常见的错误,显示在错误列表中。如您所见,方法名称的末尾有 Copy,但它仍然报告名称不正确。

以下是我现在使用检查器版本 253 遇到的错误细分:

Bug Summary

Results in this analysis run are based on analyzer build checker-253.

Bug Type    Quantity
All Bugs    83  

Dead code   
Unreachable code    17  

Memory (Core Foundation/Objective-C)    
Bad release 19  
Leak of returned object 23  
Object sent -autorelease too many times 24

自动释放错误似乎与分析器无法看到 Copy 方法实际上被正确命名的事实有关,我试图寻找无法访问代码的示例,但我真的找不到任何模式或解释这些错误,因为错误是简单 if 语句中的所有代码行。这是一个例子:

又一个 Clang 分析器错误

我想这可能是最新版本的检查器中引入的一些错误,导致这些错误显示为错误。还有什么我可能在这里遗漏的东西(某种构建设置或扫描构建脚本的问题)吗?

4

1 回答 1

5

首先,方法名称应该以小写字母开头,而不是大写(除了 URL 等缩写)。可能是静态分析器被大写的“Get”绊倒了。

接下来,即使使用小写的“get”,该方法也不遵循约定。

引用文档:

仅对间接返回对象和值的方法使用“get”。仅当需要返回多个项目时,才应将此表单用于方法。

因此,分析器正确识别问题。

我建议遵循指南并使用类似的东西:

+ (NSArray *) modifiedOrNewPeople: (FMDatabase *) aDatabase;

这将释放一个自动释放的数组。如果由于某种原因您无法返回自动释放的对象,请发表评论。

于 2011-01-08T08:06:45.503 回答