2011-01-24 57 views
4

我想在我的.m文件中定義一個常量。我可以在這裏看到兩種選擇:靜態常量Vs定義指令

static NSString *const kMyLabel = @"myLabel"; 

#define kMyLabel @"myLabel" 

哪一個是最好的?在這裏使用static有任何問題嗎?

回答

3

唯一的區別是,你可以把變量的地址,而你不能接受一個常量字符串表達式的地址(這是宏減少到)。如果可能,我寧願避免#define,所以我會選擇前者,但這只是一個風格問題。

+0

明白了。謝謝! – Abhinav 2011-01-24 21:53:50

1

從使用的角度來看,大部分情況並不重要。但是使用靜態方法有一個小優點,即代碼中常量的每個用法都是指向完全相同對象的指針(大多數情況下),而#define方法將創建該字符串的副本。我相信在最近的編譯器中,它足夠智能地將defines作爲一個對象,但爲了安全起見,我只是使用static方法。

+1

都不會創建字符串的副本。常量字符串在編譯單元中是唯一的。 – Chuck 2011-01-24 20:59:37