Update für Xcode 5 & iOS 7
Anmerkung: für eine Xcode 7 / Swift 2.1 Lösung zu entfernen print () Anweisungen in einer Release - Build, findet meine Antwort hier .
Ja, Sie sollten alle NSLog-Anweisungen in Ihrem Release-Code entfernen, da dies nur Ihren Code verlangsamt und in einer Release-Version nicht von Nutzen ist. Glücklicherweise ist es in Xcode 5 (iOS 7) erstaunlich einfach, alle Ihre NSLog-Anweisungen in Release-Builds "automatisch" zu entfernen. Warum also nicht?
Zuerst die 3 Schritte, dann eine Erklärung
1) Suchen Sie in Ihrem Xcode-Projekt die Datei 'yourProjectName-prefix.pch' (normalerweise finden Sie diese unter der Gruppe 'unterstützende Dateien', in der sich Ihre main.m-Datei befindet
2) Fügen Sie diese 3 Zeilen am Ende der '.pch'-Datei hinzu:
#ifndef DEBUG
#define NSLog(...);
#endif
3) Testen Sie den Unterschied zwischen Ihrer 'Debug'- und' Release'-Version. Eine Möglichkeit, dies zu tun, besteht darin, "Schema bearbeiten" -> "App-Namen ausführen" -> unter der Registerkarte "Info" über das Dropdown-Feld zwischen Debug & Release auszuwählen. In der Release-Version wird keine NSLog-Ausgabe in der Debug-Konsole angezeigt!
Wie funktioniert das alles?
Zunächst muss man wissen, dass ein Präprozessor relativ "dumm" ist und nur als "Textersatz" fungiert, bevor der Compiler aufgerufen wird. Es ersetzt alles, was Sie "definieren", durch das, was der #define
Anweisung folgt .
#define NSLog(...);
Das (...)
steht für 'irgendetwas' zwischen den Klammern (). Beachten Sie auch das ;
am Ende. Dies ist nicht unbedingt erforderlich, da der Compiler dies wegoptimieren wird, aber ich möchte es dort platzieren, da es "korrekter" ist. Nach unserem #define
gibt es 'nichts', also ersetzt der Präprozessor es durch 'nichts' und wirft einfach die gesamte Zeile weg, beginnend NSLog...
bis einschließlich ;
.
define-Anweisungen können mit #ifdef
(falls definiert) oder #ifndef
(falls nicht definiert) bedingt gemacht werden.
hier schreiben wir #ifndef DEBUG
, was bedeutet "wenn das Symbol DEBUG nicht definiert ist". Die #ifdef
oder #ifndef
müssen mit geschlossen werden#endif
Xcode 5 definiert standardmäßig das 'DEBUG'-Symbol für uns, wenn der Build-Modus' DEBUG 'ist. In 'release' ist dies nicht definiert. Sie können dies unter Ihren Projekteinstellungen auf der Registerkarte "Build-Einstellungen" überprüfen -> scrollen Sie nach unten zum Abschnitt "Apple LLVM 5.0 - Vorverarbeitung" -> Präprozessor-Makros. Sie werden sehen, dass das Symbol 'DEBUG' für Release-Builds nicht definiert ist!
Schließlich wird die .pch-Datei von Xcode automatisch erstellt und während der Kompilierungszeit automatisch in jede Quelldatei aufgenommen. Es ist also so, als hätten Sie das #define
Ganze in jede Ihrer Quelldateien eingefügt.