在 .h 文件中,我有以下行(在任何 @interface 块之外):
static NSMutableDictionary *dictLookup;
在相应的 .m 文件中,我尝试在init
类的方法中初始化该静态:
dictLookup = [NSMutableDictionary dictionary];
dictLookup setValue:@"Hello?" forKey:@"Goodbye"];
但是,当我插入断点并进行检查时,dictLookup 永远不会变成 nil。
此外,我在编译时收到一个奇怪的警告“未使用的变量 dictLookup”。奇怪的是,如果我删除静态声明,那么我会在方法中的行中收到“未声明的标识符”编译器错误init
。
从那以后,我发现有更好的方法来做我想做的事。但是这里发生了什么?(1) 为什么我不能将 dictLookup 设置为任何内容?
一些消息来源似乎说,在 C 中,静态变量只能在声明它的文件中使用。(2) 如果是这样,那么为什么编译器不会因 .m 文件中的错误而失败?鉴于(1),这似乎是设计编译器要做的合乎逻辑的事情。
(3) 当我从头开始设计一个新的“测试”项目时,使用一个新的 .h/.m 文件组合,就像描述的那样,我能够设置 dictLookup 和插入键。为什么会出现这种差异?