2012-10-19 91 views
1

在我的應用程序中,我必須重新定義一個宏。我喜歡這個。重新定義宏

-(void)viewDidLoad{ 

#undef kMacro 
#define kMacro @"New Value" 

} 

它在這個函數中工作正常。當我把NSLog放到這個函數中時,我會得到「新值」。但是,我無法在這個功能之外或其他類別中獲得這個新值。 (我正在獲得舊價值)。是否有可能將宏重新定義爲全局?

回答

1

當您重新定義文件中的宏時,它僅對該文件有效,因爲所有文件都被視爲單獨的編譯單元。

要使其在其他類中工作,您需要將其放入一個頭文件中,並將其導入到您要使用的所有文件中。

更妙的是,不要使用宏和使用適當的C:

const NSString* kMyString = @"New Value"; 

,然後您可以訪問它在其他.m文件,普通的外部變量。

+1

該聲明應該是'NSString * const kMyString',它是一個只讀指向'NSString'的指針,而不是一個(可重新分配的)指向一個(冗餘)只讀'NSString'的指針。見http://stackoverflow.com/questions/2917941/how-to-declare-nsstring-constants-for-passing-to-nsnotificationcenter –