2012-10-09 68 views
2

可能重複:
Is it true that one should not use NSLog() on production code?
Do I need to disable NSLog before release Application?從發行刪除的NSLog構建

我需要刪除所有這些都存在於我的項目發佈版本在NSLOGs。我曾嘗試使用下面的代碼,但仍然通過電話訪問構建,仍然在控制檯中顯示NSLOG。

#ifdef DEBUG 
#define debug_NSLog(format, ...) NSLog(format, ## __VA_ARGS__) 
#else 
#define debug_NSLog(format, ...) 
#endif 
+2

您是否在代碼中使用'debug_NSLog'代替'NSLog'? – mttrb

+0

請將常數值分配給.pch文件,並指定布爾值並檢查天氣的值是否爲true,然後顯示其他方式不顯示。 –

+0

可能你的答案在這裏http://stackoverflow.com/questions/300673/is-it-true-that-one-should-not-use-nslog-on-production-code –

回答

4

使用下面的代碼

#ifdef DEBUGGING 
# define DBLog(fmt,...) NSLog(@"%@",[NSString stringWithFormat:(fmt), ##__VA_ARGS__]); 
#else 
# define DBLog(...) 
#endif 

確保編譯器標誌設置正確。

此外,當您檢查控制檯時,是否檢查您是否使用發佈模式?

+0

這幾乎在功能上等同於OPs'debug_NSLog'。這如何回答OP的問題? – mttrb

+0

可能是他錯過了設置編譯器標誌,或者當他檢查我提到的控制檯時,構建處於調試模式。 – zahreelay

+0

這是另一種方式,我覺得這一件容易的事在我的應用程序發佈的當前狀態: 的#ifndef DEBUG 的#define的NSLog(...)/ *抑制的NSLog在釋放模式*/ #ENDIF –

1

使用此

#if TARGET_IPHONE_SIMULATOR 
#define NSLog(fmt,...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 
#else 
#define NSLog(...) 
#endif 

這將打印NSLog如果你是在模擬器上運行它..

+0

許多開發者的時候正在測試和調試實際的設備而不是模擬器,但它可能對一些有用。 – zonabi

12

簡單地刪除NSLogs:

#define NSLog(s,...) 

一個#define沒有規定將取代替代沒有什麼,刪除任何匹配#define的東西。這適用於簡單的標記定義和像上面那樣的函數式定義。

+0

我已經添加了一點解釋說*爲什麼*它的作品。 –

+0

哦,非常感謝 – Stas

+0

我已經使用過這個「#define NSLog(s,...)」,但仍然在設備中的RELEASE MODE中運行應用程序,仍然在控制檯中出現NSLOG。 – Nishan29