2011-03-31 49 views
2

我試圖在發佈版本中禁用NSLog。#define NSLog(...)仍然打印輸出到控制檯

我把下面的代碼.PCH文件

的#ifndef __OPTIMIZE__
#定義的NSLog(...)的NSLog(__ VA_ARGS__)
的#else
#定義的NSLog(...) {}
#ENDIF

它不工作,所以我試圖

#定義的NSLog(...){}

它仍然打印輸出到控制檯。

任何幫助將是好的,謝謝!

+0

你應該打開'NDEBUG',而不是'__OPTIMIZE__'。 – jww 2015-01-23 17:09:01

回答

0

確保__OPTIMIZE__在構建設置中定義或.PCH文件本身上漲和PCH文件在前綴頭(GCC_PREFIX_HEADER)設置構建設置。您還可以定義的NSLog(...)如無

#define NSLog(...)

+0

可能不是最好的將其定義爲無 - 這可能會導致代碼中的意外副作用,例如,如果語句與單個NSLog跟隨和沒有括號... – fbrereto 2011-03-31 20:02:20

+0

好點我刪除它 – Joe 2011-03-31 20:03:33

+1

雖然我說好點我只是意識到在NSLog之後你仍然需要一個分號,所以'for(int i = 0; i <10; i ++);'是有效的。可能導致問題的地方是在代碼中使用逗號。 'int i; i = 10,NSLog(「i%d」,i);' – Joe 2011-03-31 20:21:40

1

你會宣稱自己的日誌功能,並使用它。它的實現可以通過NSLogv,如果你想要一個名單。它的實現也不會在禁用時將消息轉發給NSLogv,因此您可能需要多於一種記錄器。

1

聽起來像你想要的類似於DLog的這個定義從this previous SO answer on NSLog tips and tricks。在其項目的構建設置

#ifdef DEBUG 
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 
#else 
# define DLog(...) 
#endif 
0

預處理宏設置:DEBUG = 1 $(繼承)

所以,現在只需使用:如果(調試)的NSLog(@ 「你的日誌」);

0

在您的應用程序.pch文件中放入以下行。 define NSLog(dese,...)

它將停止打印。

相關問題