2015-06-14 36 views
2

我读过(Effective Objective-C 2.0)static在实现文件(m.file)中声明的变量对于定义它们的翻译单元是本地的,并且这些变量将不会公开在全局符号表中 。但是,如果在没有static的情况下声明.m文件中的全局变量,则它的行为如同static。那么static是隐含在这种情况下使用还是这些是不同的事情?编译器是否包含全局符号表中没有静态修饰符的全局变量?

实施例:

//in the m.file 

static int staticVariable;//100% static 
int globalVariable;//is static ? 
@implementation SomeClass { 
//local ivars declaration 
} 

回答

1

配售变量是编译器相关的。

只要遵守范围规则,编译器就可以将文件静态变量放入全局变量段。实际上,只要符合“as-if”规则,编译器就可以将变量放置在读写内存中的任何位置。

在文件范围内定义变量时,使用static而不是使用的区别在于static隐藏了来自其他翻译单元的变量。否则,他们会被视为一样。

注意:这适用于C++,因为OP具有C++标记。我不知道这是否也适用于Objective C,因为这是另一种语言。