2012-03-11 19 views
21

¿Alguien me puede decir cuál es la diferencia entre NSLog y DLog?Diferencia entre NSLog y DLog

he encontrado sobre este dlog cuando yo estaba buscando sobre este código de proyecto: http://code.google.com/p/iphone-socks-proxy/

+0

¿Qué es DLog por curiosidad? –

+1

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

+2

[La evolución de un reemplazo para NSLog] (http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog) – vikingosegundo

Respuesta

9

NSLog es una función que se construye en el marco de la Fundación que Apple ofrece. Nunca he oído hablar de DLog, así que supongo que es una función no estándar implementada por el código que está viendo.

+7

'DLog' significa 'Debug Log' (I ' m asumiendo) y suele ser una macro que no se evalúa en nada si la bandera del entorno 'DEBUG' está desactivada, principalmente en las aplicaciones de envío. –

+1

@Kurt: Incluso yo pensé eso en primer lugar, pero no pude encontrar nada en ese proyecto. Y aquí está el enlace del proyecto que estoy viendo: http://code.google.com/p/iphone-socks-proxy/ – slonkar

+1

Está definido en [SocksProxy_Prefix.pch] (http://code.google.com/ p/iphone-socks-proxy/source/browse/trunk/SocksProxy_Prefix.pch). –

13

DLog es una macro destinada a condicionalizar el comportamiento de NSLog() en las versiones de depuración y liberación. Para versiones de lanzamiento, no imprimirá nada. NSLog() está destinado a imprimir cadenas de formato a la consola.

Aquí es su definición como referencia:

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

Eso no es verdad. 'NSLog' no está destinado a ser usado para imprimir literales de cadena en la consola, para eso, puede usar' printf' (o 'fputs') y amigos si lo desea. El objetivo de 'NSLog' es imprimir información útil y válida en el registro del sistema. –

67

dlog es una alternativa de uso común "depuración NSLog" (sólo Google para ello)

Aquí es un conjunto completo de directivas #define registro (incluyendo Ulog, una función de registro basado UIAlertView)

// 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 

Justo colóquelos en su archivo de encabezado de precompilación (.pch).

(fuente: http://overbythere.co.uk/blog/2012/01/alternatives-nslog)

+0

Esto es rockin 'gracias! – capikaw

+0

Hola, mi proyecto no tiene un archivo PCH. Entonces, ¿dónde ponerlo? – GeneCode

+0

@Rocotilos quizás esté usando swift (por lo tanto, no hay archivo pch ...) – Pascal

8

Hola, Debajo del cmd macro para el formato de archivo de sustitución NSLog y también por debajo he mencionado undef Macro, así como

Definición:

#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

Creo que una diferencia importante entre NSLog y DLog es que NSLog retrasa la ejecución del programa (imagina olvidar para eliminar todas las llamadas NSLog en producción/publicación), por lo que para depuración se debe usar DLog.