objective-c - 解释 clang 静态分析器消息

标签 objective-c clang-static-analyzer

为什么 Clang 静态分析器 (CSA) 输出以下消息:

Although the value stored to 'self' is used in the enclosing expression, the value is never actually read from 'self'

对于以下方法:

- (id)init
{
    return (self = [super initWithStyle:UITableViewStyleGrouped]);
}

代码按预期工作,所以我想知道从技术角度来看代码是否不正确,这是 CSA 中的错误,还是我只是遗漏了一些非常明显的东西。

仅供引用,我使用此模式是因为我不希望创建此类实例的类能够指定表格样式。

最佳答案

更“正确”的方法如下:

- (id)init
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

并且它应该满足静态分析器

编辑:

我对为什么 Clang 不喜欢这句话的最佳猜测:

当您编写(self = [super initWithStyle:UITableViewStyleGrouped])时,init调用的结果将存储到一个临时变量中,然后将其复制到self,然后就是该方法实际返回的临时变量。

虽然这是完全合法且正常的行为(并且不会破坏您的应用程序),但静态分析器(正确地)注意到存储在 self 中的值从未被实际读取。

为了说明这一点,请使用以下代码:

- (id)init
{
    id temp = [super initWithStyle:UITableViewStyleGrouped];
    self = temp;
    return temp;
}

抛出相同的静态分析器错误。

关于objective-c - 解释 clang 静态分析器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1950324/

相关文章:

objective-c - 如何在 macbook pro(Intel 64 位处理器)上用 C 语言演示内存错位错误

iphone - 模仿 iOS GameCenter UI?

objective-c - 我怎样才能知道一个对象是否实现了一个特定的方法?

objective-c - git、国际化和 iOS 字符串文件

ios - 在每次翻页 UIPageViewController 后调用方法调用

c - 为什么访问以 null 结尾的字符串会给出 'garbage or undefined' ?

doxygen - 抑制 clang-tidy -Wdocumentation "empty paragraph"错误

Clang 静态分析器找不到 stdio.h

iphone - Xcode 3.2.4 分析器跳过了这个文件?