<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 un environnement XCode. Etre juste une fonction, tout comme l'autre, sa présence se fera sentir, même lors de la libération (release) de notre exécutable. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Il devient donc nécessaire de retirer, d'une certaine façon, toutes les lignes de NSLog() à partir de notre code, car il n'est pas nécessaire, soit parce que les appels à NSLog() pourrait affecter la performance de notre application, surtout si nous mettons NSLog() pour «boucle interne.
Immédiatement écarter la solution à la «look» et «Annuler», parce qu'un jour il pourrait être utilisé à nouveau. Nous excluons aussi la solution du «look» et «commentaires», inconfortables pour la même raison que précédemment. Heureusement, un propre, simple et sont conditionnels à l'aide des compilateurs correctes. Ce que nous faisons dans la pratique, et dire au compilateur d'exclure - s'il ya une condition spécifique - lors de la compilation de nos lignes de source qui contiennent NSLog() .
Les compilations de directives et instructions du compilateur conditionnelle, sont un outil très puissant et très répandue. Ceux qui viennent de l'élaboration de la norme ANSI-C savez certainement très bien et utilizzte dans de nombreuses situations. La particularité de ces «instructions» réside dans le fait, mentionné ci-dessus, 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 ennuyeux.
Voyons un exemple de code qui, comme prévu, vous pouvez "supprimer" en compilant des morceaux 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 remplir / / Bloc de code entre # ifdef et # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... bla bla"); # Endif |
). Les instructions conditionnelles font partie du compilateur de la même famille que #define , aussi, 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 ; les lignes suivantes 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, insérant 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 à s'estomper, la prochaine compilation, toute notre NSLog() .
Un meilleure et dernière
Voyons maintenant comment configurer l'environnement XCode pour améliorer encore plus ce que nous avons fait ici! D'abord nous choisissons un nom de constante que nous utilisons dans nos projets visant à exclure de la compilation NSLog() . o quello che preferite. Vous pouvez choisir le nom que vous voulez, à partir de DEBUG à MIO_DEBUG ou ce que vous préférez. Ouvrez votre projet, neuf ou ancien. Placez tous 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, faites un clic droit et choisissez l'Get Info.

Cela ouvre une fenêtre avec des informations sur le projet:

Sélectionnez l'onglet Générer, vérifier que vous êtes en configuration Debug (ce qui est le joyau), aller à la section utilisateur et d'ajouter, via le bouton en bas à gauche, un nouveau champ appelé OTHER_CFLAGS . A ce assegnamoli la valeur -DMIO_DEBUG=1 . La syntaxe est -D{mia define}=1 .
Cette procédure présente deux avantages:
- Nous ne devons pas mettre dans le code
#define MIO_DEBUG 1, mais nous le faisons à travers l'information du projet. Donc, quand nous allons à remplir la version (l'un sans l'NSLog()) nous devons nous rappeler de supprimer la ligne#define MIO_DEBUG 1 - La constante est définie par rapport à la configuration, dans la cas de débogage. Puis, passant à la configuration de sortie (communiqué) sera absent et les lignes constantes avec
NSLog()ne sera pas compilé
Conclusions
La procédure ci-dessus peut être utile dans certains cas moltidutine autres, avec NSLog() , n'ont rien à voir. 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 version du système d'exploitation, la cible, la présence de processeurs mathématiques, tout en conservant la même "identique" source.
Pour comprendre cela, à titre d'exemple, nous pouvons utilizzre notre constante MIO_DEBUG aussi d'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 10000 :) # 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 est un # 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 elle n'est pas une constante définie # Ifndef constante / / Else # Else / / Fermeture du bloc # Endif |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Par exemple ... # Define DEBUG 1 # Définir MIA_ALTRA_COSTANTE 5 ... # Si DEBUG / / Remplissez ce # Else / / Sinon combler cette 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 |






Derniers Commentaires
Giovambattista Fazioli : @ Nik: Je suis heureux! Bonne chance alors!
Nik : J'ai lundi l'examen des informations sur java, grâce à moi que vous avez été très utile, le livre que je n'était pas claire ...
Marquez : Merci beaucoup, je l'ai allumé
Je l'ai résolu par la mise en [cc_objc] / / OptionViewController.m - ...
Giovambattista Fazioli : @ Mark: Je vous suggère de réfléchir une approche plus correcte. Si vous exécutez la sous-classe de l'onglet ...
louis : très clair et simple, je dois avouer que rédiger un an à peine utiliser des délégués créés par ...