Comment faire pour supprimer NSLog () à partir des sources XCode

Vendredi, Juin 26, 2009

NSLog() est une fonction utile lors des premières étapes d'un projet pour tester et déboguer une application pour iPhone d'Apple, ou, plus généralement, dans une XCode. Étant juste une fonction, comme les autres, sa présence se fera sentir même quand vous relâchez (communiqué) notre exécutable. Il devient alors nécessaire d'enlever, en quelque sorte, toutes les lignes de NSLog() à partir de notre code, ou parce qu'ils n'ont plus besoin, soit parce que les appels à NSLog() pourrait affecter les performances de notre application, surtout si nous mettons NSLog() pour «boucle intérieure.

Maintenant, nous excluons la solution à la "recherche" et "supprimer", car on pourrait alors servir encore. Excluent également la solution de la "recherche" et "commentaires" mal à l'aise pour la même raison que précédemment. Heureusement, une solution propre, facile à trouver et corriger grâce à des instructions conditionnelles du compilateur. Ce que nous faisons dans la pratique et dire au compilateur d'exclure - si il ya une condition spécifique - au cours de la compilation de nos lignes de source qui contiennent NSLog()

Les directives du compilateur et des instructions conditionnelles du compilateur, sont un très puissant et très répandue. Ceux qui viennent de développement ANSI-C les connaît très bien et sera certainement utilizzte dans de nombreuses situations. La particularité de ces «instructions» réside dans le fait, mentionné ci-dessus, d'ê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.

Maintenant, nous voyons un exemple de code qui, comme annoncé, permet "d'éliminer" de la compilation du code, dans notre cas NSLog()

Objective-C:
  1. # Define ACTIVE_NSLOG 1
  2. / / Si le ACTIVE_NSLOG constante est définie remplir
  3. / / Bloc de code entre # ifdef et # endif
  4. # Ifdef ACTIVE_NSLOG
  5. ) ; NSLog (@ "... bla bla");
  6. # Endif

Les instructions conditionnelles du compilateur font partie de la même famille que le #define bien, en fait, sont précédées d'un "hash" # Dans l'exemple montré que nous avons défini une ACTIVE_NSLOG les lignes suivantes du code de dire au compilateur de ligne "include" NSLog() uniquement si ACTIVE_NSLOG est définie. Si nous avions le traitement, pendant l'écriture de notre code, d'insérer les appels vers NSLog() dans le bloc #ifdef ... #endif #ifdef ... #endif il suffit de supprimer la définition de la ACTIVE_NSLOG constante de disparaître, la prochaine compilation, toutes nos NSLog()

Une meilleure solution est finalement

Nous voyons maintenant comment configurer l'environnement XCode pour améliorer encore plus ce que nous avons fait plus haut! Tout d'abord on choisit un nom de constante que nous utilisons dans nos projets d'exclure de la compilation NSLog() Vous pouvez choisir le nom que vous voulez, à partir de DEBUG à MIO_DEBUG ou ce que vous préférez. Ouvrez votre projet, qu'il soit neuf ou ancien. Placez tous les NSLog() dans le bloc (ou bloc):

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

Sélectionnez le fichier principal de votre projet, cliquez avec le bouton droit et choisissez le Obtenir des informations.

getinfo

Fenêtre s'ouvre avec des informations sur le projet:

userdefine

Sélectionnez l'onglet Construire, vérifiez d'être en configuration Debug (ceci est le joyau), passez à la section définie par l'utilisateur et d'ajouter, via le bouton en bas à gauche, un nouveau champ appelé OTHER_CFLAGS Ici assegnamoli -DMIO_DEBUG=1 La syntaxe est -D{mia define}=1

Cette procédure présente deux avantages:

  1. Nous devons inclure dans le code #define MIO_DEBUG 1 mais nous le faisons à travers les informations du projet. Donc quand on va à compiler la version release (l'un sans NSLog() nous ne devons pas oublier d'effacer la ligne #define MIO_DEBUG 1
  2. La constante est définie par rapport à la configuration, le débogage dans notre cas. Ensuite, le passage à la configuration de sortie (release) sera absent et les lignes constant avec NSLog() ne sera pas achevée

Conclusions

La procédure décrite ci-dessus mai être utile dans certains cas moltidutine autre, avec NSLog() n'ont rien à voir avec. Les instructions conditionnelles du compilateur peut contribuer dans une large gamme 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 du processeur mathématique, tout en conservant le même "identiques" Source.

Pour comprendre, à titre d'exemple, nous utilizzre notre MIO_DEBUG constants également intervenir dans d'autres domaines du code:

Objective-C:
  1. / / Debug en cas de victoire du jeu
  2. / / Avec un score de 100 au lieu de 10000 :)
  3. # Ifdef MIO_DEBUG
  4. score == 100 ) if (score == 100)
  5. # Else
  6. score == 10000 ) if (score == 10000)
  7. # Endif
  8. (
  9. ; [HaiVinto Self];
  10. )

Pour terminer, voici quelques exemples et des variantes:

Objective-C:
  1. / / Plus généralement, il est
  2. # If expression
  3. / / Si semblable au traditionnel, puis avec une expression complète
  4. / / Vérifier si elle est constante définie
  5. ifdef constants
  6. / / Vérifier si elle n'est pas définie réglé
  7. # Ifndef constants
  8. / / Else
  9. # Else
  10. / / Fin du bloc
  11. # Endif

Objective-C:
  1. / / Par exemple ...
  2. # Define debug 1
  3. # Define MIA_ALTRA_COSTANTE 5
  4. ...
  5. # If DEBUG
  6. / / Remplissez ce
  7. # Else
  8. / / Fill Sinon que d'autres
  9. # Endif
  10. # Si 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

Related Post

Cet article était utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Chargement ...

Il n'ya pas de commentaires pour cet article

Laissez un commentaire

TAG PERMISSIONS XHTML: <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