2012-01-25 19 views
18

Quiero saber acerca de la diferencia entre el NSLog y la declaración Printf en ObjectiveC (para fines de aplicación ...!)Diferencia entre NSLog y sentencia printf para ObjectiveC

¿Por qué todos desarrollador utiliza en lugar de NSLogPrintf?

Ambos tienen un aspecto similar, pero ¿cuál es la diferencia en el funcionamiento interno?

¿En qué punto se pueden diferenciar?

Respuesta

29
  • printf() es una función de la biblioteca estándar de C, aceptando una constante de cadena C (const char *) como su argumento de formato. printf() escribe en stdout.

  • NSLog() es una función Fundación, aceptando un NSString constante como el formato, y tiene un conjunto especificador de formato extendido (por ejemplo, printf() objetos de impresión does't especificados por %@, NSLog() hace). NSLog() también imprime el nombre y la fecha del proceso antes de que imprima el formato real y lo escribe en sdterr.

Básicamente, podemos decir que es un NSLog()printf() función de estilo extendido para Objective-C (más precisamente, Cacao y tacto) y fines específicos.

8

Desde el punto de vista del desarrollador, la mayor diferencia es que NSLog admite tipos de objetos Objective-C a través del formato% @. NSLog también escribe en stderr, mientras que printf escribe en stdout.

3

I ver dos diferencias principales entre NSLog y printf:

  1. NSLog soportes NSString objetos a través de la extensión %@;

  2. Además, NSLog agrega automáticamente los datos de tiempo y de proceso (por ejemplo, 2012-01-25 17: 52: 10.479 proceso [906: 707])

+1

Más exactamente: 'NSLog admite objetos a través de la extensión% @, al invocar implícitamente la descripción de ese objeto - (NSString *); method' –

+0

La tercera mayor diferencia es que NSLog envía salida a stderr, donde como printf envía a stdout. – Munim

20

NSLog es como un printf, pero lo hace un poco más:

  • Se agrega una marca de tiempo a la salida.
  • La salida se envía a la consola Xcode, o lo que stderr se define como.
  • Acepta todos los especificadores de printf, pero también acepta el operador @ para objetos que muestra la cadena proporcionada por el método description del objeto. (description es parte de NSObject, por lo que todos los objetos pueden anularlo para devolver una cadena que describa el objeto).
  • La salida también se envía al Apple System Log (ASL), que es la versión de Apple de syslogd. Esta información puede ser leída por otras aplicaciones usando una API de C, o por un usuario de OS X usando la aplicación "Consola".
+0

+1: Agradable y conciso. – ArtOfWarfare