2013-04-14 10 views
11

Voglio disabilitare attraverso tutte le istanze in un'app. Ho trovato un codice che lo fa:Come disabilitare NSLog in tutta l'app?

#ifndef DEBUG 
#define NSLog // 
#endif 

Ma non è una buona idea aggiungere questo codice a ciascun file. Come posso renderlo più facile?

+3

definirlo nel file .pch – Guru

risposta

10

Xcode ha un file di intestazione precompilato ({project-name}-Prefix.pch nel gruppo File di supporto per impostazione predefinita) che è un ottimo posto dove inserire il codice che verrà utilizzato in tutti i file del progetto. Per fare un ulteriore passo avanti e migliorare il messaggio di log stesso, vedere Is it true that one should not use NSLog() on production code?.

2

Quello che faccio è mettere questo nel file di intestazione precompilata (YourAppName.pch):

#define MyLog if(0); else NSLog 

Poi ho cambiare tutto NSLog a mylog ovunque in app. Funziona come se fosse NSLog. Ma quando si desidera disabilitare NSLog, tornare al file .pch e modificare lo 0 in 1 e presto, tutte le fermate di registrazione.

+2

Questo è pericoloso perché cambia l'associazione di qualsiasi successivo 'else'. Cioè 'if (someCondition) MyLog (blah); else doSomething(); 'non significa quello che sembra. –

+0

@KenThomases Non guardarmi, l'ho preso da Jens Alfke! Non ho ancora riscontrato problemi di questo tipo, ma sono sicuro che il tuo avviso è buono. – matt

0

Basta aggiungere le seguenti righe quando si fa ' "t bisogno NSLog ai suoi costanti presentare

#define NSLog      // 

e commentarlo quando ne avete bisogno

5

Aggiungere le seguenti righe ai suoi costanti di file:.

#define DEBUGGING NO //or YES 
#define NSLog if(DEBUGGING)NSLog 

le due frasi seguenti forniscono gli stessi risultati

#define NSLog 

e

#define NSLog // 

perché tutto il testo che iniziano con // vengono eliminati in una fase di precompilazione ("//" inclusa)

+0

il tuo // suggerimento è pericoloso perché è possibile distribuire NSLog su più righe. la tua istruzione if sembra troppo volgare ... potresti usare un scope e parametri per la macro NSLog per renderla migliore ... – jheriko

2

Questo sarà anche prendersi cura delle avvertenze che si presentano quando si utilizza

#define NSLog // 

Il codice:

#ifndef DEBUG 
    #define NSLog(...) 
#endif