Xcode Analyzer 警告 - 字典值不能为 nil

Posted

技术标签:

【中文标题】Xcode Analyzer 警告 - 字典值不能为 nil【英文标题】:Xcode Analyzer warning - Dictionary value cannot be nil 【发布时间】:2014-12-19 16:42:10 【问题描述】:

这个问题很有趣。

我有两个预先存在的 Xcode 项目,它们会生成不同的分析器警告。我无法识别设置差异。

NSString *someNilString;
NSDictionary *someDict=@@"hi":someNilString;

(一个更典型的例子是 someNilString 可能是也可能不是 nil - 保持简单。)

如果我在一个项目中运行分析器,我会在第二行得到Dictionary value cannot be nil。第二个项目中的代码相同,没有消息。一个新的 Xcode 项目(在 v6.2 中创建)生成消息,因此我相信这是(适当地)默认值。

我很好奇这个设置可能在哪里。我在 Build Settings 中没有看到明显的设置。

【问题讨论】:

要么someNilString保证为nil,要么someNilString不是对象指针 是的 - 我明白为什么会出现警告,当然上面的代码会崩溃。我很好奇为什么分析器警告出现在一个项目中而不是另一个项目中。 它所说的——如果someNilString 实际上是nil(而不是简单的零长度字符串),那么您将遇到运行时故障。 @HotLicks OP 知道这一点。他想知道影响分析器行为的设置(如果有的话)。 差异可能是由于目标版本不同。 【参考方案1】:

可能是一个项目使用了 ARC,而另一个项目没有。

在 ARC 下,局部变量被初始化为 nil(零)。

在手动内存管理下,局部变量包含运行时堆栈中该位置的任何随机值。

因此,当 Xcode 计算 someDict 行时,已知 ARC 版本为零。

【讨论】:

我认为你在做某事!这两个项目都使用 ARC,但没有抛出 Analyzer 警告的项目确实有几个明确禁用 ARC 的类。我会进行一些测试并报告回来,但我敢打赌这至少是非常相关的。

以上是关于Xcode Analyzer 警告 - 字典值不能为 nil的主要内容,如果未能解决你的问题,请参考以下文章

字典的深层副本在 Xcode 4.2 中出现分析错误

什么样的内存泄漏 XCode Analyzer 可能不会注意到?

在 Swift 3 和 Xcode 8 中从嵌套字典中获取值的问题

不能使用释放或自动释放。出现黄色警告:内存泄漏和未使用的变量

Xcode自带的超好用的诊断工具

iOS测试工具系列| iOS静态代码检查工具Clang Static Analyzer介绍