प्रीप्रोसेसर मैक्रोज़ वास्तव में डीबगिंग के लिए बहुत अच्छे हैं। NSLog () के साथ कुछ भी गलत नहीं है, लेकिन बेहतर कार्यक्षमता के साथ अपने लॉगिंग फ़ंक्शन को परिभाषित करना सरल है। यहां मैं एक का उपयोग करता हूं, इसमें लॉग स्टेटमेंट को ट्रैक करना आसान बनाने के लिए फ़ाइल नाम और लाइन नंबर शामिल है।
#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
मुझे इस पूरे कथन को अपनी फ़ाइल के बजाय उपसर्ग शीर्षलेख में रखना आसान लगा। यदि आप चाहते थे, तो डिबग्लॉग सामान्य ऑब्जेक्ट-सी ऑब्जेक्ट के साथ सहभागिता करके अधिक जटिल लॉगिंग सिस्टम का निर्माण कर सकते थे। उदाहरण के लिए, आपके पास एक लॉगिंग वर्ग हो सकता है जो अपनी लॉग फ़ाइल (या डेटाबेस) को लिखता है, और इसमें एक 'प्राथमिकता' तर्क शामिल होता है जिसे आप रनटाइम पर सेट कर सकते हैं, इसलिए डिबग संदेश आपके रिलीज़ संस्करण में नहीं दिखाए जाते हैं, लेकिन त्रुटि संदेश हैं ( यदि आपने ऐसा किया है तो आप डिबग्लॉग (), वार्निंगलॉग (), और इसी तरह से बना सकते हैं।
ओह, और ध्यान रखें #define DEBUG_MODE
कि आपके आवेदन में विभिन्न स्थानों पर फिर से उपयोग किया जा सकता है। उदाहरण के लिए, मेरे आवेदन में मैं लाइसेंस कुंजी जांच को अक्षम करने के लिए इसका उपयोग करता हूं और केवल एक निश्चित तिथि से पहले आवेदन को चलाने की अनुमति देता हूं। यह मुझे मेरी ओर से न्यूनतम प्रयास के साथ एक समय सीमित, पूरी तरह कार्यात्मक बीटा कॉपी वितरित करने देता है।