use*_*412 1 static constants objective-c extern
我知道使用静态常量定义常量比使用#define 更好。
但是在这个SO question 中,为什么**extern** static const在头文件中使用,并编写另一个 m 文件来实际定义该值。为什么不只static int const kMyVar = 1;在头文件中使用而不再使用m 文件呢?
你不应该使用extern static. 您应该只使用extern.
文件.h
extern const int MyGlobalConstant; // NOTE: Not static
Run Code Online (Sandbox Code Playgroud)
文件.m
const int MyGlobalConstant = 12345; // NOTE: This is not static either
Run Code Online (Sandbox Code Playgroud)
这会创建一个内存位置File.m,导入的其他文件File.h可以在其中引用。
相比之下,
文件.h
static const int MyGlobalConstant = 12345;
Run Code Online (Sandbox Code Playgroud)
这会在每个 .m 文件中创建一个单独且不同的内存位置,其中包括File.h.
区别很重要。在第一个示例中,您有 1 MyGlobalConstant。在第二个示例中,您将有数十个甚至数百个MyGlobalConstant具有相同值的单独s。
这不仅仅是浪费空间。我可能会导致调试问题和分析器问题。