So löschen NSLog () von der Quelle XCode

Freitag, 26. Juni 2009

NSLog() ist eine nützliche Funktion in den frühen Phasen eines Projekts für das Testen und Debuggen einer Anwendung für Apple iPhone, oder ganz allgemein in einem XCode. Da nur eine Funktion, ebenso wie die andere, die seine Gegenwart zu spüren, auch wenn Sie (Freigabe) unserer ausführbare Version. Es wird dann notwendig, zu entfernen, irgendwie alle Zeilen NSLog() von unseren Code, oder weil sie nicht mehr benötigen, oder weil die Anrufe auf NSLog() die Leistung unserer Antrag auswirken könnte, besonders wenn wir NSLog() setzen NSLog() um 'innere Schleife.

Jetzt schließen wir die Lösung für die "Suche" und "Löschen", weil wir dann wieder dienen könnten. Exklusiv auch die Lösung der "Suche" und "Bemerkungen" zu unbequem aus dem gleichen Grund wie zuvor. Zum Glück, eine saubere Lösung, einfach zu finden und zu korrigieren mit bedingten Anweisungen des Compilers. Was wir tun in der Praxis und dem Compiler auszuschließen - wenn es einen bestimmten Zustand - bei der Erstellung unserer Quelle Linien, die NSLog() enthalten NSLog()

Die Compiler-Direktiven und bedingte Anweisungen des Compilers sind ein sehr leistungsfähiges und weit verbreitet. Diejenigen, die aus Entwicklungsländern ANSI-C kennt sie sehr gut und wird sicherlich in vielen Situationen utilizzte. Die Besonderheit dieser "Weisung" liegt in der Tatsache, bereits erwähnt, durch den Compiler und nicht ausführbar zu sehen. Diese Eigenschaft macht sie in vielen Fällen nützlich und kann sonst sehr lästige Probleme zu lösen.

Nun sehen wir ein Beispiel-Code, der, wie angekündigt, ermöglicht die "Beseitigung" von der Erstellung von Code, in unserem Fall NSLog()

Objective-C:
  1. # Define ACTIVE_NSLOG 1
  2. / / Wenn die Konstante definiert ist ACTIVE_NSLOG füllen
  3. / / Block von Code zwischen # ifdef und # endif
  4. # Ifdef ACTIVE_NSLOG
  5. ) ; NSLog (@ "... bla bla");
  6. # Endif

Bedingte Anweisungen des Compilers sind Teil der gleichen Familie wie #define auch in der Tat von einer "Raute" vorangestellt werden # Im gezeigten Beispiel haben wir eine konstante ACTIVE_NSLOG nachfolgenden Zeilen Code zu sagen, dass der Compiler "include" Zeile NSLog() nur dann, wenn ACTIVE_NSLOG definiert ist. Hätten wir die Behandlung, während der Arbeit an unseren Code, um Anrufe zu NSLog() insert NSLog() innerhalb des Blocks #ifdef ... #endif #ifdef ... #endif löschen Sie einfach die Definition der Konstanten ACTIVE_NSLOG zu verschwinden, die nächste Compilation, die alle unsere NSLog()

Eine bessere Lösung ist letztlich

Wir sehen jetzt, wie man die XCode-Umgebung einzustellen, um noch mehr über das, was wir getan haben, zu verbessern! Zuerst wählen wir einen konstanten Namen, die wir in unsere Projekte aus der Kompilierung NSLog() ausschließen NSLog() Sie können den Namen, den du magst, von DEBUG zu MIO_DEBUG oder was auch immer Sie bevorzugen. Öffnen Sie Ihr Projekt, egal ob neu oder alt ist. Legen Sie alle NSLog() innerhalb des Blocks (oder Block):

Objective-C:
  1. # Ifdef MIO_DEBUG
  2. ) ; NSLog (@ "... bla bla");
  3. # Endif

Wählen Sie die Haupt-Datei Ihres Projekts, klicken Sie mit der rechten Maustaste und wählen Sie Get Info.

getinfo

Fenster mit Informationen über das Projekt:

userdefine

Wählen Sie das Register Erstellen, überprüfen Sie in Debug-Konfiguration werden (dies ist die Perle), gehen Sie im Abschnitt User-Defined, und fügen Sie über die Schaltfläche am unteren linken, ein neues Feld mit dem Namen OTHER_CFLAGS Hier assegnamoli -DMIO_DEBUG=1 Die Syntax -D{mia define}=1 ist, -D{mia define}=1

Dieses Verfahren hat zwei Vorteile:

  1. Wir müssen in den Code eingeben #define MIO_DEBUG 1 aber wir tun es durch das Projekt Informationen. Wenn wir also auf die Release-Version zu kompilieren (das eine ohne das NSLog() go NSLog() müssen wir daran denken, die Zeile zu löschen #define MIO_DEBUG 1
  2. Die Konstante ist in Bezug auf die Konfiguration definiert, in unserem Fall Debugging. Dann wechseln Sie in den Release-Konfiguration (Release) wird fehlen, und die ständige Zeilen mit NSLog() wird nicht abgeschlossen

Schlussfolgerungen

Das oben beschriebene Verfahren kann beispielsweise in einer moltidutine anderen Fällen nützlich sein, mit NSLog() haben nichts damit zu tun. Bedingte Anweisungen des Compilers können in einer Vielzahl von Kontexten. Sie werden häufig von Programmierern verwendet, um den Typ des Betriebssystems, die Version, das Ziel, die Präsenz der mathematischen Prozessors, bei gleicher "identisch" Quelle.

Um zu verstehen, wie ein Beispiel utilizzre wir unsere ständige MIO_DEBUG auch in anderen Bereichen des Codes zu intervenieren:

Objective-C:
  1. / / Debug, wenn sie das Spiel zu gewinnen
  2. / / Mit einer Punktezahl von 100 anstelle von 10000 :)
  3. # Ifdef MIO_DEBUG
  4. score == 100 ) if (Gäste == 100)
  5. # Else
  6. score == 10000 ) if (Gäste == 10000)
  7. # Endif
  8. (
  9. ; [Self haiVinto];
  10. )

Zum Abschluss, hier sind einige Beispiele und Varianten:

Objective-C:
  1. / / Ganz allgemein gibt es
  2. # If-Ausdruck
  3. / / Wenn ähnlich wie die traditionellen, dann mit einem vollständigen Ausdruck
  4. / / Prüfen, ob sie definiert ist konstant
  5. ifdef konstant
  6. / / Prüfen, ob es nicht definiert ist beigelegt
  7. # Ifndef konstant
  8. / / Else
  9. # Else
  10. / / Ende des Blocks
  11. # Endif

Objective-C:
  1. / / Zum Beispiel ...
  2. # Define DEBUG 1
  3. # Define MIA_ALTRA_COSTANTE 5
  4. ...
  5. # If DEBUG
  6. / / Füllen Sie diese
  7. # Else
  8. / / Sonst füllen, dass andere
  9. # Endif
  10. # If MIA_ALTRA_COSTANTE> 4
  11. ) ; NSLog (@ "...");
  12. # Endif

Objective-C:
  1. # Ifndef INCLUDE_MIO_FILE
  2. # Define INCLUDE_MIO_FILE
  3. # Include "mio_file.h"
  4. # Endif

Verwandte Post

War dieser Artikel hilfreich?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

Es gibt keine Kommentare für diesen Beitrag

Leave a comment

TAG XHTML Berechtigungen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERTION CODE:
 <pre></pre>         // blocco generico [code][/code]       // blocco generico [as][/as]           // Actionscript [css][/css]         // CSS Style Sheet [html][/html]       // HTML [js][/js]           // Javascript [objc][/objc]       // Objective-C [php][/php]         // PHP [sql][/sql]         // SQL