Articles taggés avec 'Build'

Comment supprimer NSLog () de la source 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> une fonction utile durant les premiers stades d'un projet pour tester et déboguer une application pour iPhone d'Apple ou, plus généralement, dans l'environnement XCode. Etre juste une fonction, tout comme les autres, sa présence se fera sentir, même lors de la publication (release) de notre exécutable. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Il devient alors nécessaire d'enlever, d'une certaine façon, toutes les lignes de NSLog() de notre code, car il n'est plus nécessaire, et parce que les appels à NSLog() pourrait affecter les performances de notre application, surtout si nous mettons NSLog() à la «boucle interne.

Immédiatement écarter la solution au "look" et "annuler" parce qu'un jour il pourrait être utilisé à nouveau. Nous excluons la solution du «look» et «commentaires», inconfortable pour la même raison que précédemment. Heureusement, une. Propre, simple, et en utilisant le compilateur correct conditionnelles Ce que nous ferons, dans la pratique, et dire au compilateur d'exclure - s'il ya une condition spécifique - lors de la compilation de nos lignes source qui contiennent NSLog() .

Les directives de compilation et des déclarations de compilation conditionnelle, sont un outil très puissant et très répandue. Ceux venant de l'élaboration de la norme ANSI-C connaît très bien et sera certainement utilizzte dans de nombreuses situations. La particularité de ces «instructions» réside dans le fait, mentionné plus haut, pour être vu par le compilateur et non exécutable. Cette caractéristique les rend utiles dans de nombreux cas et peut résoudre les problèmes par ailleurs très agaçant.

Voyons un exemple de code qui, comme prévu, vous pouvez "supprimer" de la compilation du partage de code, dans notre cas NSLog() :

1
2
3
4
5
6
# Définir une ACTIVE_NSLOG
/ / Si la constante est définie ACTIVE_NSLOG remplissez
/ / Le bloc de code entre # ifdef et # endif
# Ifdef ACTIVE_NSLOG
" ... bla bla" ) ; NSLog (@ "... bla bla");
# Endif

). Les instructions conditionnelles font partie de la compilation de la même famille que #define , également, en fait, sont précédés d'un "livre" ( # ). solo se ACTIVE_NSLOG è definito. Dans l'exemple montré que nous avons défini une constante ACTIVE_NSLOG ; lignes de code indique au compilateur de ligne "include" NSLog() que si ACTIVE_NSLOG est défini. Si nous avons pris soin, lors de la rédaction de notre code, de placer des appels à NSLog() dans le bloc #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , il suffit de supprimer la définition de la constante ACTIVE_NSLOG à disparaître, la prochaine compilation, tous nos NSLog() .

Une meilleure et finale

Voyons maintenant comment configurer l'environnement XCode pour améliorer encore plus ce que nous avons fait ici! Tout d'abord nous choisissons un nom de constante que nous utilisons dans nos projets d'exclure de la compilation NSLog() . o quello che preferite. Vous pouvez choisir le nom que vous voulez, à partir DEBUG au MIO_DEBUG ou ce que vous préférez. Ouvrez votre projet, neuf ou ancien. Entrez toutes les NSLog() dans le bloc (ou bloc):

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

Sélectionnez le fichier principal de votre projet, cliquez sur le bouton droit et choisissez l'option Get Info.

getinfo

Ceci ouvre la fenêtre avec des informations sur le projet:

userdefine

Sélectionnez l'onglet Générer, vérifiez que vous êtes dans la configuration Debug (ce qui est le joyau), allez à la section utilisateur et d'ajouter, via le bouton en bas à gauche, un nouveau champ appelé OTHER_CFLAGS . A cette valeur assegnamoli -DMIO_DEBUG=1 . La syntaxe est -D{mia define}=1 .

Cette procédure a deux avantages:

  1. Nous ne devons pas mettre dans le code #define MIO_DEBUG 1 , mais nous le faisons à travers les informations du projet. Alors, quand nous allons à remplir la version (l'un sans l' NSLog() ) n'ont pas à se rappeler pour supprimer la ligne #define MIO_DEBUG 1
  2. La constante est définie par rapport à la configuration, dans notre cas de débogage. Ainsi, le passage à la version de configuration (communiqué) seront absents et les rangées constante avec NSLog() ne sera pas compilé

Conclusions

La procédure ci-dessus peut être utile dans un cas moltidutine autre, avec NSLog() , n'ont rien à faire. Les instructions conditionnelles peuvent aider le compilateur dans un large éventail de contextes. Ils sont souvent utilisés par les programmeurs pour déterminer le type de système d'exploitation, la version, la cible, la présence de processeurs mathématiques, tout en conservant le même "même" source.

Pour comprendre, par exemple, nous pouvons utilizzre notre constante MIO_DEBUG également intervenir dans d'autres domaines du code:

1
2
3
4
5
6
7
8
9
10
/ / Debug s'ils gagnent le match
/ / Avec un score de 100 au lieu de 10 000:)
# Ifdef MIO_DEBUG
score == 100 ) if (score de == 100)
# Else
score == 10000 ) if (score de == 10000)
# Endif
{
; [HaiVinto auto];
}

Pour finir, voici quelques exemples et des variantes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ / En général, il ya
# Si l'expression
/ / Si la déclaration semblable à la traditionnelle, donc avec une pleine expression

/ / Vérifier si une constante est définie
# Ifdef constante

/ / Vérifier si ce n'est pas une constante définie
# Ifndef constante

/ / Else
# Else

/ / Fermer le bloc
# Endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Par exemple ...
# Define DEBUG 1
5 # define MIA_ALTRA_COSTANTE

...
# Si DEBUG
/ / Remplissez ce
# Else
/ / Sinon remplissez cet autre
# Endif

# Si MIA_ALTRA_COSTANTE> 4
"..." ) ; NSLog (@ "...");
# Endif
1
2
3
4
# Ifndef INCLUDE_MIO_FILE
# Définir INCLUDE_MIO_FILE
# Include "mio_file.h"
# Endif

Suite ...