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 Analyzer 可能不会注意到?
在 Swift 3 和 Xcode 8 中从嵌套字典中获取值的问题