2013-04-16 34 views
0

我想定義一個變量並將其設置爲所有類中的值x,但不包括給定類中的值。將一個變量設置爲x,除了一個類中,它是y

因此,我已添加到文件MyApp-Prefix.pch

int ddLogLevel = LOG_LEVEL_VERBOSE; 

現在,在一個給定的類,我想改變這個變量。 我該怎麼辦?我應該在哪裏放新命令?在.m?在@implementation之前?有/無const和/或static和/或type ??


PS:當你看到它,我什麼都不懂到extern/const事情。如果有人知道一個好的和明確的參考,對於一個不認識C的新手,我會接受它!

+1

你想要的是一個全局變量嗎?看看[這個答案](http://stackoverflow.com/questions/8808159/objective-c-global-variables) – Fonix

+0

是的,它是全局變量,設置爲Prefix.pch ans中的值,我可以覆蓋一個給定的班級。 – Colas

回答

2

我將ddLogLevel識別爲日誌系統cocoalumberjack的日誌級別。相反,「覆蓋」你的班級(沒有這樣的事情,因爲它是一個全局變量),你應該做他們所說的Fine Grained Logging。也就是說,使用位掩碼中的下一位定義日誌,然後將全局常量設置爲包含或排除標誌的掩碼的按位組合。它在鏈接頁面上進一步解釋。例如:

添加這些定義

#define LOG_FLAG_FOOD_TIMER (1 << 4) // 0...0010000 
#define LOG_FOOD_TIMER (ddLogLevel & LOG_FLAG_FOOD_TIMER) 
#define DDLogFoodTimer(frmt, ...) ASYNC_LOG_OBJC_MAYBE(ddLogLevel, LOG_FLAG_FOOD_TIMER, 0, frmt, ##__VA_ARGS__) 

然後在你的類使用該宏爲日誌聲明:

DDLogFoodTimer(@"blah"); 

,並設置全局爲:

static const int ddLogLevel = LOG_LEVEL_WARN | LOG_FLAG_FOOD_TIMER; 

在C和Objective-C中的const關鍵字創建一個只讀變量。關鍵字const適用於其左邊的任何內容。如果左邊沒有任何東西,它適用於右邊的任何東西。例如:

// a modifiable pointer to a constant integer (its value can't be modified). 
const int * i; 

// Constant pointer to constant integer. 
const int const * i; 

的extern是一個變量在別處定義的指示。定義像這樣的全局變量是很常見的風格:

// header file (outside the class definition) 
extern NSString* PREFS_MY_CONSTANT; 

// implementation file (outside the class definition) 
NSString* PREFS_MY_CONSTANT = @"prefs_my_constant"; 
+0

謝謝!首先,你的意思是「其他地方宣佈」而不是「其他地方定義」? – Colas

+0

第二:我已經看到了這個解決方案,但它不是我正在尋找的,因爲我不想爲我的記錄器使用一個新名稱。我的想法是在#define的幫助下將DDLogVerbose()重新定義爲我的類。你有什麼暗示嗎?謝謝 ! – Colas

+1

我的意思是聲明'extern'在哪裏,但是在別處定義(設置)。你不能爲每個類定義一個'#define',因爲它們的影響是全局的。您必須將'__PRETTY_FUNCTION__'(翻譯成類似' - [SomeClass someMethod]')的類型傳遞給記錄器,然後放棄基於類名稱的語句。 – Jano

相關問題