什么时候我的const在Objective-C中应该是静态的?

时间:2014-04-14 19:37:29

标签: objective-c c

在.m文件的顶部,我传统上有一个const int varWidth = 42;或类似的东西。如果我想要公开,我会在我的.h。

中添加extern const int varWidth

然而,在阅读this link之后,如果仅在.m文件中使用静态(但不公开),则建议使用静态。这是为什么?

我理解静态意味着它只会被初始化一次并且它的值将持续用于程序的完整执行,但是如果它仍然是const,我不会看到它是多么重要。

3 个答案:

答案 0 :(得分:2)

在C语言和相关语言中(目标C是其中之一),静态存储类说明符主要用于信息隐藏

如果将static关键字添加到变量声明中,则使用内部链接标记它。内部链接意味着多个标识符引用不同的东西,即使它们出现在不同的翻译单元中(在C中,翻译单元是C预处理器处理后的源文件)。换句话说,具有内部链接的标识符只能从已声明它的翻译单元中看到。

如果您不希望其他翻译单元中的实体知道源文件中的特定标识符,则应使用它。根据您的常量,如果您没有多个实体,则可以根据需要进行更改,同时尽量减少对计划的影响。

答案 1 :(得分:1)

对于顶级范围中的变量,static表示变量具有内部链接。因此,声明具有相同名称的静态变量的两个文件将各自具有自己的变量而不是冲突。

答案 2 :(得分:0)

Objective-C是C的超集,因此static全局变量意味着与C中相同的内容。在C static中,全局变量仅在声明它的文件中可见。 你可以在这里读更多关于它的内容: What does “static” mean in a C program?