我已经读过(Effective Objective-C 2.0),在实现文件(m.file)中声明的static
变量是定义它们的转换单元的本地变量,这些变量不是暴露在
全球符号表。但是如果在没有static
的情况下声明.m文件中的全局变量,它就像static
一样。那么在这种情况下隐含使用static
还是这些是不同的事情?
示例:
//in the m.file
static int staticVariable;//100% static
int globalVariable;//is static ?
@implementation SomeClass {
//local ivars declaration
}
答案 0 :(得分:1)
放置变量取决于编译器。
只要遵守范围规则,就允许编译器将文件静态变量放入全局变量段。实际上,只要遵守“as-if”规则,编译器就可以将变量放在读写内存中的任何位置。
在文件范围定义变量时,使用static
与否的区别在于static
隐藏了其他翻译单元的变量。否则他们会受到同样的待遇。
注意:这适用于C ++,因为OP具有C ++标记。我不知道这是否也适用于Objective C,因为那是另一种语言。