2012-01-25 5 views
18

Voglio sapere circa la differenza tra il NSLog e Printf dichiarazione ObjectiveC (a scopo di applicazione ...!)Differenza tra NSLog e printf per ObjectiveC

Perché tutti gli sviluppatori usano NSLog invece di Printf?

Entrambi sembrano simili, ma qual è la differenza nel funzionamento interno?

A che punto possono essere differenziati?

risposta

29
  • printf() è una funzione di libreria C standard, accettando una stringa C costante (const char *) come argomento formato. printf() scrive su stdout.

  • NSLog() è una funzione Foundation, accettando un NSString costante come formato, e ha un set di formato esteso (per esempio, printf() oggetti di stampa does't specificate da %@, NSLog() fa). NSLog() stampa anche il nome e la data del processo prima di stampare il formato effettivo e scrive su sdterr.

Fondamentalmente, possiamo dire che NSLog() è una estesa funzione Style printf() per Objective-C (più precisamente, Cocoa e Cocoa Touch) e per scopi specifici.

8

Dal punto di vista dello sviluppatore, la più grande differenza è che NSLog supporta i tipi di oggetto Objective-C tramite il formato% @. NSLog scrive anche su stderr, mentre printf scrive su stdout.

3

Vedo due differenze principali tra NSLog e printf:

  1. NSLog supporta NSString oggetti attraverso l'estensione %@;

  2. inoltre, NSLog aggiunge automaticamente dati di tempo e di processo (per esempio, 2012-01-25 17: 52: 10,479 processo [906: 707])

+1

Più precisamente: 'NSLog supporta gli oggetti tramite l'estensione% @, chiamando implicitamente la descrizione dell'oggetto - (NSString *); method' –

+0

La terza differenza maggiore è che NSLog invia l'output a stderr, dove come printf viene inviato a stdout. – Munim

20

NSLog è come un printf, ma fa un po 'di più:

  • Un timestamp viene aggiunto all'output.
  • L'output viene inviato alla console Xcode, o qualunque sia lo stderr definito.
  • Accetta tutti gli specificatori printf, ma accetta anche l'operatore @ per gli oggetti che visualizza la stringa fornita dal metodo description dell'oggetto. (description fa parte di NSObject, quindi tutti gli oggetti possono sovrascriverlo per restituire una stringa che descrive l'oggetto).
  • L'output viene anche inviato all'Apple System Log (ASL), che è la versione di syslogd di Apple. Questi dati possono essere letti da altre applicazioni che utilizzano un'API C o da un utente OS X che utilizza l'applicazione "Console".
+0

+1: bello e conciso. – ArtOfWarfare