Xcode 5 और iOS 7 के लिए अपडेट
नोट: एक्सकोड 7 / स्विफ्ट 2.1 समाधान के लिए एक रिलीज बिल्ड में प्रिंट () स्टेटमेंट निकालने के लिए, यहां मेरा जवाब ढूंढें ।
हां, आपको अपने रिलीज़ कोड में किसी भी NSLog स्टेटमेंट को हटा देना चाहिए, क्योंकि यह आपके कोड को धीमा कर देता है, और रिलीज़ संस्करण में किसी काम का नहीं है। सौभाग्य से, Xcode 5 (iOS 7) में, रिलीज बिल्ड में आपके सभी NSLog स्टेटमेंट 'स्वचालित रूप से' को हटाना आश्चर्यजनक रूप से सरल है। तो क्यों नहीं करते।
पहले 3 कदम उठाने के लिए, फिर कुछ स्पष्टीकरण
1) अपने Xcode प्रोजेक्ट में, 'yourProjectName-prefix.pch' फाइल का पता लगाएं (सामान्य तौर पर आपको यह ग्रुप 'सपोर्टिंग फाइल्स' के तहत मिलेगा, जहां आपकी main.m फाइल स्थित है।
2) '.pch' फ़ाइल के अंत में इन 3 पंक्तियों को जोड़ें:
#ifndef DEBUG
#define NSLog(...);
#endif
3) अपने 'डीबग' और 'रिलीज़' संस्करण के बीच अंतर का परीक्षण करें। ऐसा करने का एक तरीका 'एडिट स्कीम' -> 'रन ऐप नाम' -> टैब के तहत 'डीबग' के तहत डिबग और रिलीज़ के बीच ड्रॉप-डाउन बॉक्स का उपयोग करना है। रिलीज़ संस्करण में आपको डीबग कंसोल में कोई भी NSLog आउटपुट दिखाई नहीं देगा!
यह सब कैसे काम करता है?
सबसे पहले, किसी को पता होना चाहिए कि एक प्रीप्रोसेसर अपेक्षाकृत 'डंब' है, और कंपाइलर को कॉल करने से पहले सिर्फ 'टेक्स्ट रिप्लेज़र' के रूप में कार्य करता है। यह #define
कथन का अनुसरण करके आपको कुछ भी '#define' बदल देता है ।
#define NSLog(...);
(...)
कोष्ठक के बीच 'कुछ भी' () के लिए खड़ा है। ;
अंत में भी मन । यह कड़ाई से आवश्यक नहीं है क्योंकि संकलक इसे दूर अनुकूलित करेगा, लेकिन मैं इसे वहां रखना पसंद करता हूं, क्योंकि यह अधिक 'सही' है। हमारे बाद #define
or कुछ नहीं ’है, इसलिए प्रीप्रोसेसर इसे, कुछ नहीं’ के साथ बदल देगा, और इसलिए यह पूरी लाइन को फेंक देगा, NSLog...
जब तक और जिसमें से शुरू होता है ;
।
परिभाषित बयानों का उपयोग कर सशर्त बनाया जा सकता है #ifdef
(यदि परिभाषित किया गया है) या #ifndef
(यदि परिभाषित नहीं है)
यहाँ हम लिखते हैं #ifndef DEBUG
, जिसका अर्थ है 'अगर प्रतीक DEBUG परिभाषित नहीं है'। #ifdef
या #ifndef
होने की जरूरत के साथ 'बंद'#endif
डीकोड मोड 'डेबग' होने पर Xcode 5 डिफ़ॉल्ट रूप से हमारे लिए 'DEBUG' प्रतीक को परिभाषित करता है। 'रिलीज़' में यह परिभाषित नहीं है। आप इसे अपनी परियोजना सेटिंग्स के तहत सत्यापित कर सकते हैं, टैब 'सेटिंग बनाएँ' -> नीचे अनुभाग 'Apple LLVM 5.0 - Preprocessing' -> प्रीप्रोसेसर मैक्रोज़ पर स्क्रॉल करें। आप देखेंगे कि रिलीज़ बिल्ड के लिए प्रतीक 'DEBUG' परिभाषित नहीं है!
अंत में, .pch फ़ाइल Xcode द्वारा स्वचालित रूप से बनाई जाती है, और संकलन समय के दौरान स्वचालित रूप से हर स्रोत फ़ाइल में शामिल होती है। तो यह ऐसा है जैसे कि आपने #define
अपनी प्रत्येक स्रोत फ़ाइल में पूरी चीज़ डाल दी होगी ।