这个问题是好奇心的问题之一。
我有两个预先存在的 Xcode 项目,它们会生成不同的分析器警告。 我无法确定设置差异。
NSString *someNilString;
NSDictionary *someDict=@{@"hi":someNilString};
(一个更典型的例子是某些NilString可能是或可能不是nil - 保持简单。
如果我在一个项目中运行分析器,我会在第二行Dictionary value cannot be nil
。 第二个项目中的代码相同,没有消息。 一个新的 Xcode 项目(在 v6.2 中创建(生成消息,因此我相信这是(适当地(默认设置。
我很好奇这个设置可能在哪里。 我在构建设置中没有看到明显的设置。
可能是一个项目正在使用 ARC,而另一个项目没有。
在 ARC 下,局部变量初始化为 nil(零(。
在手动内存管理下,局部变量包含运行时堆栈中该位置剩余的任何随机值。
因此,当 Xcode 计算 someDict 行时,已知 ARC 版本为 nil。