Makro preprocessor memang bagus untuk debugging. Tidak ada yang salah dengan NSLog (), tetapi mudah untuk mendefinisikan fungsi logging Anda sendiri dengan fungsionalitas yang lebih baik. Ini yang saya gunakan, termasuk nama file dan nomor baris untuk memudahkan melacak pernyataan log.
#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
Saya merasa lebih mudah untuk menempatkan seluruh pernyataan ini di header awalan daripada file sendiri. Anda bisa, jika mau, membangun sistem logging yang lebih rumit dengan membuat DebugLog berinteraksi dengan objek Objective-C yang normal. Misalnya, Anda bisa memiliki kelas logging yang menulis ke file log sendiri (atau database), dan menyertakan argumen 'prioritas' yang dapat Anda atur saat runtime, sehingga pesan debug tidak ditampilkan dalam versi rilis Anda, tetapi pesan kesalahannya adalah ( jika Anda melakukan ini, Anda bisa membuat DebugLog (), WarningLog (), dan sebagainya).
Oh, dan perlu diingat #define DEBUG_MODE
dapat digunakan kembali di berbagai tempat dalam aplikasi Anda. Misalnya, dalam aplikasi saya, saya menggunakannya untuk menonaktifkan pemeriksaan kunci lisensi dan hanya mengizinkan aplikasi untuk menjalankannya sebelum tanggal tertentu. Ini memungkinkan saya mendistribusikan salinan beta yang berfungsi penuh dan terbatas waktu dengan sedikit usaha di pihak saya.