2015-06-14 33 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,因爲這是另一種語言。