2012-02-01 244 views
0

靜態變量是在編譯時靜態分配的變量。我懷疑是爲了什麼目的,某些變量是靜態聲明的?直到現在,我還沒有在代碼中使用任何靜態變量。從securityWrapper.m蘋果代碼http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html ,有一條線ObjectiveC中的靜態變量

static SecKeyWrapper * __sharedKeyWrapper = nil; 

什麼用的靜態分配__sharedKeyWrapper這裏?

我看過在這麼多代碼中使用靜態關鍵字。所以請好好解釋靜態關鍵字的用法和好處。

在此先感謝。

回答

1

全局文件是singleton,用於共享類的一個實例。

它在Objective-C中是靜態的原因是internal linkage。實際上,這意味着變量不能在它聲明的文件之外被看到。如果另一個文件聲明瞭一個具有相同名稱的變量,它們是兩個不同的變量。

請記住,Objective-C實例的工作方式,實例實際上不會自動分配。相反,你有一個指向實例的指針。該代碼仍然需要做類似:

if (!_sharedKeyWrapper) { 
    _sharedKeyWrapper = [[SecKeyWraper alloc] initBlahBlah]; 
} 

查看更多鏈接。

1

當你定義一個新的對象類時,你可以決定他們應該有什麼實例 變量。該類的每個實例都將擁有您聲明的所有變量的 自己的副本;每個對象都控制着自己的 數據。

但是,你不能規定類對象的變量;有 沒有與實例變量相對應的「類變量」。只有內部的 數據結構,從類定義初始化,爲 類提供。類對象也不能訪問任何實例的實例變量 ;它不能初始化,讀取或修改它們。

因此,對於一個類的所有實例來共享數據,需要某種外部 變量。某些類聲明靜態變量 並提供用於管理它們的類方法。 (聲明一個變量static 與類定義在同一個文件中,將其範圍限制爲僅僅是 類 - 僅僅是文件中實現的類的一部分 與實例變量不同,靜態變量不能被)

靜態變量幫助給類對象更多的功能,而不僅僅是產生實例的「工廠」的功能的 ;它可以靠自己的方式成爲完整和多功能的對象。類對象可以是 ,用於協調它創建的實例,分配來自 的實例已創建的對象列表,或者管理對應用程序至關重要的其他進程。在只需要一個特定類的一個對象的情況下,可以將所有對象的狀態置於靜態變量 中,並且只使用類方法。這節省了分配 並初始化實例的步驟。

0

靜態變量也被初始化一次。您可以在遞歸調用中使用靜態變量。簡單的例子因子。