Artikel Tagged '# ifndef'

Wie NSLog () von der Quelle entfernen XCode

<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 der frühen Phase eines Projekts zum Testen und Debuggen einer Anwendung für Apple iPhone oder ganz allgemein in XCode-Umgebung. Da nur eine Funktion, genau wie der andere, wird seine Anwesenheit auch zu spüren sein, wenn die Freigabe (Release) unserer ausführbare. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Es wird daher notwendig zu entfernen, in gewisser Weise, alle Linien von NSLog() aus unserem Code, weil es nicht notwendig ist, entweder weil die Anrufe an NSLog() , die Leistung unserer Anwendung beeinträchtigen könnten, insbesondere wenn wir setzen NSLog() , um 'innere Schleife.

Unmittelbar auszuschließen Lösung für das "Look" und "Abbrechen", weil es eines Tages wieder verwendet werden könnten. Wir schließen auch die Lösung des "Look" und "Kommentare", unangenehm aus dem gleichen Grund wie zuvor. Zum Glück eine saubere, einfache und mit den richtigen Compiler Konditionale. Was wir tun in der Praxis, und sagen Sie dem Compiler mit, ausschließen - wenn es einen bestimmten Zustand - bei der Erstellung unserer Quelle Linien, die enthalten NSLog() .

Die Zusammenstellungen von Richtlinien und Anweisungen des bedingten Compiler, sind ein sehr mächtiges und weit verbreitet. Wer von der Entwicklung der ANSI-C sicherlich wissen sehr gut, und wird in vielen Situationen utilizzte. Die Besonderheit dieser "Anleitung" liegt in der Tatsache, oben erwähnt, auf die der Compiler und nicht ausführbar zu sehen. Diese Eigenschaft macht sie in vielen Fällen nützlich und kann Probleme lösen, sonst sehr ärgerlich.

Mal sehen, ein Beispiel-Code, der, wie vorhergesagt, Sie "Löschen" können durch die Erstellung Teile des Codes, in unserem Fall NSLog() :

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

). Bedingte Anweisungen sind Teil der Compiler 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 ; nachfolgende Zeilen Code weist den Compiler an "include" Zeile NSLog() nur dann, wenn ACTIVE_NSLOG definiert ist. Wenn wir uns kümmerten, während der Arbeit an unseren Code, Einfügen Anrufe an 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 verblassen, die nächste Compilation, alle unsere NSLog() .

Ein bestes und endgültiges

Wir wollen nun sehen, wie Sie 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, von der Kompilierung ausschließen NSLog() . o quello che preferite. Sie können wählen, den Namen, den Sie mögen, von DEBUG zu MIO_DEBUG oder was auch immer Sie bevorzugen. Öffnen Sie Ihr Projekt, neu oder alt. Platzieren Sie alle NSLog() innerhalb des Blocks (oder Block):

1
2
3
# Ifdef MIO_DEBUG
" ... bla bla" ) ; NSLog (@ "... bla bla");
# Endif

Wählen Sie die Haupt-Datei des Projekts mit der rechten Maustaste und wählen Sie das Get Info.

getinfo

Dies öffnet ein Fenster mit Informationen über das Projekt:

userdefine

Wählen Sie das Register Erstellen, überprüfen Sie, ob Sie in Debug-Konfiguration sind (dies ist die Perle), auf die User-Defined Abschnitt und fügen über den Button unten links, ein neues Feld namens OTHER_CFLAGS . An dieser assegnamoli der Wert -DMIO_DEBUG=1 . Die Syntax ist -D{mia define}=1 .

Dieses Verfahren hat zwei Vorteile:

  1. Wir dürfen nicht in den Code gesetzt #define MIO_DEBUG 1 , aber wir tun es durch das Projekt Informationen. Also, wenn wir zum Ausfüllen des Release-Version (das eine ohne das gehen NSLog() ) müssen wir uns erinnern, um die Zeile zu löschen #define MIO_DEBUG 1
  2. Die Konstante wird in Bezug auf die Konfiguration definiert, in unserem Fall Debug. Dann werden Übergabe an die Release-Konfiguration (Freigabe) fehlen und die ständigen Reihen mit NSLog() wird nicht kompiliert werden

Schlussfolgerungen

Das oben beschriebene Verfahren kann in einem moltidutine anderen Fällen nützlich, mit NSLog() , nichts zu tun haben. Bedingte Anweisungen können helfen den Compiler in einer Vielzahl von Kontexten. Sie werden oft von Programmierern verwendet, um die Art der Version des Betriebssystems, das Ziel, die Anwesenheit von mathematischen Prozessoren, bestimmen unter Beibehaltung der gleichen "identisch" Quelle.

Um dies zu verstehen, als Beispiel, können wir unsere ständige utilizzre 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 gewinnen
/ / Mit einem Ergebnis 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 eine
# Wenn Ausdruck
/ / If-Anweisung ähnlich der traditionellen, also mit einem vollen Ausdruck

/ / Prüfen, ob eine Konstante definiert
# Ifdef konstant

/ / Prüfen, ob es nicht eine Konstante definiert
# Ifndef konstant

/ / Else
# Else

/ / Closing des Blocks
# Endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Zum Beispiel ...
# Define DEBUG 1
# Definieren MIA_ALTRA_COSTANTE 5

...
# If 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
# Definieren INCLUDE_MIO_FILE
# Include "mio_file.h"
# Endif

Mehr ...


Stop SOPA