2012-02-07 45 views
3

我有一個大的Xcode項目,有幾十個NSLogs,有些已經註釋掉了。打開和關閉NSLogs的正則表達式?

在Xcode中的查找/替換有一個正則表達式選項,所以我怎麼能使它註釋掉所有活動的NSLogs,以另一種查找/替換方式可以再次打開它們。所以,最初的代碼是:

//NSLog(@"one"); 
NSLog(@"two"); 

變,正則表達式查找後/替換:

//NSLog(@"one"); 
//**NSLog(@"two"); 

這其中重新打開就變成了:

//NSLog(@"one"); 
NSLog(@"two"); 
+0

我想你已經回答了你自己的問題。要打開它們,只需找到並替換'// ** NSLog' – Max 2012-02-07 11:02:04

+0

否,那不會離開現有的已註釋的NSLogs – cannyboy 2012-02-07 11:11:15

+0

@cannyboy:如果您打開常規表達式,則需要將星號轉義出來/// * \ * NSLog' – JeremyP 2012-02-07 11:12:53

回答

4

有一個更好的解決方案。只需將它放在您的prefix.pch文件中:

//disable logging when not in debug 
#ifndef DEBUG 
#undef NSLog 
#define NSLog(args, ...) 
#endif 

當您的應用程序未處於調試模式時,將禁用NSLog。這樣你不必從代碼中移除它們,但它們不會對性能產生影響。

如果您想知道它是如何工作的,那麼當未定義DEBUG宏時,它將NSLog()函數重新定義爲空白。默認情況下,DEBUG僅爲調試項目定義。如果您願意,只需用#if SOME_OTHER_CONDITION替換第一行,就可以將其更改爲以不同的方式打開和關閉。

+0

+1 @nick毫無疑問這是一個很好的解決方案,但你不覺得'NSLog'是一個函數而不是宏 – 2012-02-07 11:21:44

+0

這不是一個理論上的解決方案 - 我經常使用它。你可能是正確的NSLog是一個函數,但沒有定義它,並重新定義爲一個宏的工作正常。 – 2012-02-07 11:34:26

+1

我覺得稍微好一點的就是'#define NSLog(...)(void)0'。這可以防止編譯器警告,並讓代碼更加理智 - 「(void)0」更接近實際語句而非虛無。 – mvds 2012-02-07 11:40:40

1

更好的解決方案是使用一個宏,如DLog,您可以使用調試(或您自己的編譯器標誌)來控制它。檢查這linkthis