2012-11-24 54 views
4

有時我喜歡瀏覽蘋果的源代碼,看看專業人士如何做,有時候會學到一兩樣東西。現在我在看的NSManagedObjectContext.h頭文件,併爲他們的全局變量,用於表示NSManagedObjectContextDidSaveNotification,他們這樣聲明:爲什麼Apple使用特殊的COREDATA_EXTERN限定符而不是extern?

COREDATA_EXTERN NSString * const NSManagedObjectContextDidSaveNotification; 

,而通常這純粹是:

extern NSString * const NSManagedObjectContextDidSaveNotification 

Cmd的在COREDATA_EXTERN +點擊帶我到它的定義:

#define COREDATA_EXTERN  extern 

所以COREDATA_EXTERN剛好等於extern,所以我的問題是,爲什麼他們不只是使用extern

回答

3

如果你看看CoreDataDefines.h文件,你會看到COREDATA_EXTERN幾個不同的定義,如:

#ifdef __cplusplus 
#define COREDATA_EXTERN  extern "C" 

或:

#ifdef __cplusplus 
#define COREDATA_EXTERN  extern "C" _NSWINDOWS_DLL_GOOP 

這使得一些特定的平臺定義,全部包含在單一定義下。

Windows goop,很有趣。我想知道什麼時候你會在Windows平臺上編譯核心數據......

+2

核心數據源於[Enterprise Objects Framework](http://en.wikipedia.org/wiki/Enterprise_Objects_Framework),可在多種平臺和體系結構上使用。 – rickster

+0

最近的一個鏈接會指向黃箱DBM系統,它在停止使用時會讓很多Windows開發人員不滿。 – CodaFi

相關問題