<a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog">NSLog()</a> eine nützliche Funktion in den frühen Phasen eines Projekts zum Testen und Debuggen einer Anwendung für Apple iPhone oder ganz allgemein in die XCode-Umgebung. Da nur eine Funktion, genau wie die anderen, wird seine Anwesenheit auch zu spüren sein, wenn die Freigabe (Release) unserer ausführbar. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Es wird dann notwendig, zu entfernen, in gewisser Weise alle Zeilen in NSLog() aus dem Code entfernen, weil sie nicht mehr benötigt wird, und weil Anrufe an NSLog() konnte die Leistungsfähigkeit unserer Anwendung auswirken, insbesondere wenn wir setzen NSLog() , um "inneren Schleife.
Unmittelbar auszuschließen Lösung für das "Look" und "Abbrechen", weil es eines Tages wieder verwendet werden könnten. Wir schließen die Lösung der "Look" und "Kommentare", unbequem aus dem gleichen Grund wie zuvor. Glücklicherweise einem sauberen, einfachen und den richtigen Compiler conditionals. Was wir in der Praxis zu tun, und sagen, dass der Compiler auszuschließen - wenn es einen bestimmten Zustand - bei der Erstellung unserer Quelle Linien enthalten NSLog() .
Die Compiler-Direktiven und Compiler bedingte Anweisungen, sind ein sehr mächtiges und weit verbreitet. Diejenigen, die aus der Entwicklung der ANSI-C sehr gut kennt und wird definitiv in vielen Situationen utilizzte. Die Besonderheit dieser "Anleitung" liegt in der Tatsache, oben erwähnt, durch den Compiler zu sehen und nicht ausführbar. Diese Eigenschaft macht sie in vielen Fällen nützlich und kann Probleme lösen, sonst sehr ärgerlich.
Lassen Sie uns ein Beispiel-Code, der, wie vorhergesagt, Sie "Löschen" kann von der Erstellung von Code-Share, in unserem Fall sehen NSLog() :
1 2 3 4 5 6 | # Define ACTIVE_NSLOG 1 / / Wenn die Konstante definiert ist ACTIVE_NSLOG füllen / / Der Block von Code zwischen # ifdef und # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
). Bedingte Anweisungen sind Teil des Compilers von der gleichen Familie wie #define , auch in der Tat, werden durch ein "Pfund" (vorausgegangen # ). solo se ACTIVE_NSLOG è definito. In dem gezeigten Beispiel haben wir eine Konstante definiert ACTIVE_NSLOG ; nachfolgenden Zeilen Code weist den Compiler an "include" Zeile NSLog() nur dann, wenn ACTIVE_NSLOG definiert ist. Wenn wir kümmerten, während des Schreibens von unseren Code, um Anrufe zu NSLog() innerhalb des Blocks #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , löschen Sie einfach die Definition der konstanten ACTIVE_NSLOG zu verschwinden, die nächste Compilation, alle unsere NSLog() .
Ein bestes und endgültiges
Lassen Sie uns nun sehen, wie die XCode-Umgebung eingerichtet, um noch mehr, was wir hier getan haben, zu verbessern! Zuerst wählen wir einen konstanten Namen, die wir in unseren Projekten zu verwenden, um aus der Kompilierung ausschließen NSLog() . o quello che preferite. Sie können wählen, den Namen, den Sie möchten, von DEBUG zu MIO_DEBUG oder was auch immer Sie bevorzugen. Öffnen Sie Ihr Projekt, neu oder alt. Geben Sie alle NSLog() innerhalb des Blocks (oder Block):
1 2 3 | # Ifdef MIO_DEBUG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
Wählen Sie die Haupt-Datei Ihres Projekts, klicken Sie die rechte Maustaste und wählen Sie das Get Info Element.

Es öffnet sich das Fenster mit Informationen über das Projekt:

Wählen Sie das Register Erstellen, überprüfen Sie, ob Sie in der Debug-Konfiguration (das ist die Perle) sind, um die User-Defined Abschnitt und fügen über den Button unten links, ein neues Feld namens OTHER_CFLAGS . Bei diesem Wert assegnamoli -DMIO_DEBUG=1 . Die Syntax ist -D{mia define}=1 .
Dieses Verfahren hat zwei Vorteile:
- Wir dürfen nicht in den Code eingefügt,
#define MIO_DEBUG 1, aber wir tun es durch das Projekt Informationen. Also, wenn wir füllen die Release-Version (die man ohne unterwegsNSLog()zu tun) nicht daran denken, die Zeile zu löschen#define MIO_DEBUG 1 - Die Konstante ist in Bezug auf die Konfiguration, in unserem Fall Debug definiert. So wird die Umstellung auf Konfiguration (release) Release fehlen und die ständige Zeilen mit
NSLog()wird nicht kompiliert werden
Schlussfolgerungen
Das oben beschriebene Verfahren kann in einer moltidutine anderen Fällen nützlich sein, mit NSLog() , nichts zu tun haben. Bedingte Anweisungen helfen kann der Compiler in einer Vielzahl von Kontexten. Sie werden oft von Programmierern verwendet, um den Typ des Betriebssystems, die Version, das Ziel, die Präsenz der mathematischen Prozessoren, bestimmen unter Beibehaltung der gleichen "gleichen" Quelle.
Um zu verstehen, als Beispiel, können wir utilizzre unser ständiger MIO_DEBUG auch in anderen Bereichen des Codes zu intervenieren:
1 2 3 4 5 6 7 8 9 10 | / / Debug, wenn sie das Spiel zu gewinnen / / Mit einer Punktzahl von 100 statt 10000:) # Ifdef MIO_DEBUG score == 100 ) if (score == 100) # Else score == 10000 ) if (score == 10000) # Endif { ; [HaiVinto self]; } |
Zum Abschluss, hier sind einige Beispiele und Varianten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | / / In der Regel gibt es # Wenn der Ausdruck / / If-Anweisung ähnlich der traditionellen, so mit einem vollen Ausdruck / / Überprüfen, ob eine Konstante definiert ist # Ifdef konstant / / Prüfen, ob es sich NICHT um eine definierte # Ifndef konstant / / Else # Else / / Schließen Sie den Baustein # Endif |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Zum Beispiel ... # Define DEBUG 1 5 # define MIA_ALTRA_COSTANTE ... # Wenn DEBUG / / In diesem Fill # Else / / Sonst füllen Sie dieses anderen # Endif # Wenn MIA_ALTRA_COSTANTE> 4 "..." ) ; NSLog (@ "..."); # Endif |
1 2 3 4 | # Ifndef INCLUDE_MIO_FILE # Define INCLUDE_MIO_FILE # Include "mio_file.h" # Endif |






Neueste Kommentare
Mark : @ Mark: Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Mark : Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Giovambattista Fazioli : @ Mark: Im Prinzip, absolut, hängt viel ab, wie und was zum Download bereit. La ..
Mark : Hallo, guter Führer! Ich wollte fragen, können Sie den gleichen Code, um eine SQL-Datenbank laufen? Statt ...
Joseph : Hallo Ich wollte Sie fragen, wie können Sie in der Post finde ich hochgeladen einer Galerie von 50 Bildern, zum Beispiel ...