Les macros du préprocesseur sont en effet très utile pour le débogage. Il n'y a rien de mal avec NSLog(), mais il est simple de définir votre propre fonction d'enregistrement avec de meilleures fonctionnalités. Voici celui que j'utilise, il comprend le nom du fichier et le numéro de ligne pour le rendre plus facile pour suivre les instructions de journalisation.
#define DEBUG_MODE
#ifdef DEBUG_MODE
#define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DebugLog( s, ... )
#endif
Je l'ai trouvé plus facile de mettre l'intégralité de cette déclaration dans le préfixe en-tête plutôt que de son propre fichier. Vous pouvez, si vous le vouliez, construire un complexe système de journalisation en ayant DebugLog interagir avec la normale Objective-C objets. Par exemple, vous pourriez avoir une classe de log, qui écrit dans son propre journal de bord (ou base de données), et comprend une "priorité" argument vous pouvez définir au moment de l'exécution, de sorte que les messages de débogage ne sont pas affichés dans votre version, mais les messages d'erreur sont (si vous l'avez fait ce que vous pourriez faire de DebugLog(), WarningLog(), et ainsi de suite).
Oh, et garder à l'esprit #define DEBUG_MODE
peut être ré-utilisé dans des endroits différents dans votre application. Par exemple, dans mon application je l'utilise pour désactiver la clé de licence de contrôles et d'autoriser uniquement l'exécution de l'application si c'est avant une certaine date. Cela me permet de distribuer un temps limité, entièrement fonctionnel bêta copie avec un minimum d'effort de ma part.