在objc項目中使用常量的最佳實踐(附:常量重定義解決辦法)之前,在在objc項目中使用常量中,使用c的預(yù)處理#define來設(shè)置常量。比如,可以做個頭文件,然后在需要的類文件中import,使用常量。 但這不是最佳實踐。這樣做可能是最好的方式,首先在比如叫Constants.h的頭文件中:
這里使用到extern c關(guān)鍵字,表示這個變量已經(jīng)聲明,只是引用。const關(guān)鍵字表示變量是常量,不可修改。 在objc的約定里,常量也是大小寫混排的駝峰命名規(guī)則,首字母小寫,另外,第一個字母是k。 然后,在Constants.m文件中:
在這里給常量kInitURL賦值。 如何使用常量?只需在所需的m文件引入Constants頭文件,下面是使用示例:
使用這種方式,比通過宏預(yù)定義的優(yōu)點是,可以對常量進行指針比較操作,這是#define做不到的。即:
上文的常量,是指可用于全局的常量。如果只是在文件內(nèi)部使用,不希望之外的地方能訪問到,就需要:
附:Objective-C中const常量是外連接的書中說在標準C中const定義的變量是外連接的,即如果一個編譯單元中定義了一個全局const常量,則其在其他編譯單元中是可見的,如果其他編譯單元也定義了同名const常量就會產(chǎn)生重復(fù)定義錯誤。這一點與C++不同,C++中const定義的變量是內(nèi)連接的,即每個編譯單元定義的全局const常量是自己獨有的。 Objective-C是標準C的另一種擴展,那么我犯的錯誤也就很明顯了——當多個編譯單元都引用那個define.h文件時出現(xiàn)了重復(fù)定義錯。 今天來到機房一試,果然如此,只要將 const int NUMOFGHOST = 4; 改為 static const int NUMOFGHOST = 4; 就順利編譯通過了。這里的static是用來把定義的const常量標記為對外不可見的。 這里順便抱怨一句:這xcode也太不人性化了,重復(fù)定義就說重復(fù)定義嘛,非要用紅紅的字標出來"Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1",反倒是很重要的那句"ld: duplicate symbol _NUMOFGHOST in /Users/asfgasiyf/Desktop/pacMan/build/pacMan.build/Debug-iphonesimulator/pacMan.build/Objects-normal/i386/MazeView.o and /Users/asfgasiyf/Desktop/pacMan/build/pacMan.build/Debug-iphonesimulator/pacMan.build/Objects-normal/i386/pacManAppDelegate.o"用灰灰的顏色顯示,也不懂得突出一下重點?? 分類: objective-c |
|
|
來自: 軟件團隊頭目 > 《IOS開發(fā)》