Aggiornamento per Xcode 5 e iOS 7
nota: per una soluzione Xcode 7 / Swift 2.1 per rimuovere le istruzioni print () in una build di rilascio, trova la mia risposta qui .
Sì, dovresti rimuovere qualsiasi istruzione NSLog nel codice di rilascio, poiché rallenta semplicemente il codice e non è di alcuna utilità in una versione di rilascio. Fortunatamente, in Xcode 5 (iOS 7), è incredibilmente semplice rimuovere "automaticamente" tutte le istruzioni NSLog nelle build di rilascio. Allora perché non farlo.
Prima i 3 passaggi da compiere, poi alcune spiegazioni
1) nel tuo progetto Xcode, individua il file 'yourProjectName-prefix.pch' (normalmente lo troverai nel gruppo 'file di supporto', dove si trova il tuo file main.m
2) aggiungi queste 3 righe alla fine del file ".pch":
#ifndef DEBUG
#define NSLog(...);
#endif
3) prova la differenza tra la tua versione "debug" e "release". Un modo per farlo è tramite "modifica schema" -> "esegui nome app" -> nella scheda "informazioni" selezionare utilizzando la casella a discesa tra debug e rilascio. Nella versione di rilascio non vedrai alcun output NSLog nella console di debug!
Come funziona tutto ciò?
prima di tutto, bisogna sapere che un preprocessore è relativamente "stupido" e agisce semplicemente come un "sostituto di testo" prima che il compilatore venga chiamato. Sostituisce tutto ciò che "#define" con ciò che segue la #define
dichiarazione.
#define NSLog(...);
Il (...)
sta per "qualsiasi cosa" tra le parentesi (). Attenzione anche ;
alla fine. Questo non è strettamente necessario poiché il compilatore lo ottimizzerà, ma mi piace metterlo lì, poiché è più "corretto". Dopo il nostro #define
non c'è "niente", quindi il preprocessore lo sostituirà con "niente", e quindi butterà via la riga completa, a partire da NSLog...
fino a quando includerà il file ;
.
le dichiarazioni di definizione possono essere condizionate usando #ifdef
(se definito) o #ifndef
(se non definito)
qui scriviamo #ifndef DEBUG
, che significa 'se il simbolo DEBUG non è definito'. Il #ifdef
o #ifndef
deve essere "chiuso" con#endif
Xcode 5 definisce di default il simbolo "DEBUG" quando la modalità di de build è "DEBUG". In "release" questo non è definito. puoi verificarlo nelle impostazioni del tuo progetto, scheda "Impostazioni build" -> scorri verso il basso fino alla sezione "Apple LLVM 5.0 - Preprocessing" -> macro del preprocessore. Vedrai che il simbolo "DEBUG" non è definito per le build di rilascio!
infine, il file .pch viene creato automaticamente da Xcode e automaticamente incluso in ogni file sorgente durante il tempo di compilazione. Quindi è come se avessi messo tutto #define
in ciascuno dei tuoi file sorgente.