2013-05-05 75 views
2

靜態變量「聲明一個變量static將其範圍限制爲僅僅是類 - 並且僅僅是文件中實現的類的一部分」(Apple doc)。類擴展中的靜態變量和變量有什​​麼不同?

而且我認爲在類擴展中定義的變量在只有類定義它時有一個限制範圍。

這是相似的!

類擴展中的靜態變量和變量有什​​麼不同?

回答

6

static變量與其定義的文件綁定在一起。它不能從該文件的外部訪問,並且在整個程序中只有一個用於創建存儲的位置。

存儲的區別也適用於非靜態全局變量 - 程序中只有一個。

類擴展中的變量同樣受限於其所聲明文件的可見性,但它是一個實例變量。有一個新的存儲附加到您創建的類的每個實例。

如果您創建static變量並從該類的多個實例中更改其值,則每個實例都會看到相同的值。 ivar的情況並非如此 - 每個對象都可以爲該變量更改並保留自己的值。

(這就是爲什麼static變量有時用於ObjC來模擬其他語言中存在的類變量。)

相關問題