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