为什么 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/