2013-04-18 88 views
1

在下面的類:未初始化的extern NSString的使用

MGTileMenu

不同的extern的NSString的在下面的方式定義用作通知:

.H

extern NSString *MGTileMenuWillDisplayNotification; // menu will be shown 

.M

NSString *MGTileMenuWillDisplayNotification; 

它被使用如下:

[[NSNotificationCenter defaultCenter] postNotificationName:MGTileMenuWillDisplayNotification 
                object:self 
                userInfo:nil]; 

我的問題是這樣的:EXTERN的NSString MGTileMenuWillDisplayNotification永遠不會被初始化爲任意值 - 但此代碼的工作。我期望在.m文件中的實現是:

NSString *MGTileMenuWillDisplayNotification = @"MGTileMenuWillDisplayNotification"; 

爲什麼這不是必要的,這是怎麼回事?

回答

0

這意味着實際變量是在程序的其他部分定義的。可能在一些框架或庫中。你甚至不必擁有相關的資源。

extern關鍵字告訴鏈接器在符號表中查找名爲MGTileMenuWillDisplayNotification的符號。 (我認爲這將是一個靜態變量,但不確定它是否是別的東西。)

NSString*告訴編譯器踩你的指針所指向的內存爲NSString對象。照常。這只是它被宣佈在別的地方,大多數probalby在其他地方正確初始化。確保它確實是框架/庫的文檔應該告訴您的NSString對象是您的責任範圍。

+0

但MGTileMenuController.m中有*是一個靜態變量'NSString * MGTileMenuWillDisplayNotification;',值爲'nil'。 –

+0

那是那個。它初始化爲零。 –

+0

但var不在其他地方初始化,所以它(隱式)無 - 如何發佈無通知工作呢? – Brynjar