获取"数组元素不能为零"来自Analyzer作为假阳性

时间:2015-08-20 16:33:08

标签: objective-c xcode clang-static-analyzer

我遇到XCode分析器正在标记有效代码的情况。

我们有一个带有方法isEmpty的NSString类别,它检查字符串是否为空,包括检查nil字符串。当它与将字符串添加到数组结合使用时,分析器会抱怨:

if (![NSString isEmpty:myString]) {
    [_myArray addObject:myString];
}

然后,分析师会向Array element cannot be nil投诉,因为它不够聪明,无法检测isEmpty是否阻止了这一点。

最好的解决方法是什么?我知道我可以将条件更改为if (myString && ![NSString isEmpty...,但这似乎是一个笨重的解决方法。

编辑:根据要求,这里是isEmpty

的正文
+ (BOOL)isEmpty:(NSString *)string
{
    return (string ? [string isEqualToString:@""] : YES); 
}

2 个答案:

答案 0 :(得分:1)

您必须确定必须向每个可能的逻辑路径显示分析仪。你的解决方法"非常好。

可能是你的isEmpty可以用来帮助分析仪更多,但你没有表明,所以不可能说。根据您实际展示的内容,我建议您只使用您的"解决方法"并继续前进。

答案 1 :(得分:1)

在Objective-C中,检查non-nil的{​​{1}}和non-empty的最简单方法是获取NSString。它为lengthnil返回0,并为empty返回正确的长度。

non-empty