2012-03-11 28 views
21

Czy ktoś może mi powiedzieć, jaka jest różnica między NSLog i DLog?Różnica między NSLog i DLog

znalazłem o tym DLog kiedy szukałem na ten kod projektu: http://code.google.com/p/iphone-socks-proxy/

+0

Co to jest DLog z ciekawości? –

+1

http://www.google.com/search?q=DLog+vs+NSLog 989,000 wyników. – CodaFi

+2

[The Evolution of a Replacement for NSLog] (http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog) – vikingosegundo

Odpowiedz

9

NSLog jest funkcją, która jest wbudowana w ramach Fundacji, że Apple zapewnia. Nigdy nie słyszałem o DLog, więc zakładam, że jest to niestandardowa funkcja zaimplementowana przez kod, który przeglądasz.

+7

'DLog' oznacza" Dziennik debugowania "(I ' m przy założeniu) i zwykle jest to makro, które ocenia się na nic, jeśli flaga środowiskowa 'DEBUG' jest wyłączona - głównie w aplikacjach wysyłkowych. –

+1

@Kurt: Nawet ja myślałem, że na pierwszym miejscu, ale nie mogłem znaleźć niczego w tym projekcie. Oto link do projektu, który przeglądam: http://code.google.com/p/iphone-socks-proxy/ – slonkar

+1

Jest on zdefiniowany w [SocksProxy_Prefix.pch] (http://code.google.com/ p/iphone-skarpetki-proxy/source/browse/trunk/SocksProxy_Prefix.pch). –

13

DLog to makro przeznaczone do warunkowania zachowania się NSLog() w kompilacjach debugowania i wydania. W przypadku wersji release nic nie wydrukuje. NSLog() służy do drukowania ciągów formatów do konsoli.

Oto jej definicja dla odniesienia:

#ifdef DEBUG 
# define DLog(...) NSLog(__VA_ARGS__) 
#else 
# define DLog(...) /* */ 
#endif 
#define ALog(...) NSLog(__VA_ARGS__) 
+5

To nie prawda. 'NSLog' nie służy do drukowania literałów łańcuchowych na konsolę - do tego możesz użyć' printf' (lub 'fputs') i znajomych, jeśli chcesz. Celem 'NSLog' jest wydrukowanie użytecznych i ważnych informacji w dzienniku systemu. –

67

DLog jest powszechnie stosowany "Debug NSLog" alternatywa (tylko Google dla niego)

Oto kompletny zestaw dyrektyw #define Log (w tym ulog, A UIAlertView funkcja rejestrowania w oparciu)

// DLog will output like NSLog only when the DEBUG variable is set 

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

// ALog will always output like NSLog 

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

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG 
# define ULog(fmt, ...) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } 
#else 
# define ULog(...) 
#endif 

Wystarczy umieść je w pliku nagłówkowym prekompilacji (.pch).

(źródło: http://overbythere.co.uk/blog/2012/01/alternatives-nslog)

+0

To jest dziękczynienie! – capikaw

+0

Witaj, mój projekt nie ma pliku PCH. Więc gdzie to umieścić? – GeneCode

+0

@Rocotilos może używasz swift (tak, nie plik pch ..) – Pascal

8

Cześć, Poniżej makro cmd do NSLog formacie wymiana a także poniżej wspomniałem jak undef Makro

Definicja:

#define _LOG_TO_CONSOLE_ //#undef _LOG_TO_CONSOLE_ 
#ifdef _LOG_TO_CONSOLE_ 
#define DLog(format, ...) NSLog(format, ##__VA_ARGS__) 
#else 
#define DLog(format, ...) 
#endif 
0

Myślę, że ważną różnicą między NSLog i DLog jest to, że NSLog jest opóźniony w wykonaniu programu (wyobraź sobie, zapomnij w celu usunięcia wszystkich wywołań NSLog w produkcji/publikowaniu), więc do celów debugowania należy użyć polecenia DLog.