2013-10-12 5 views
7

मेरे पास मेरे ऐप में बहुत सारे NSLog हैं - जिनमें से कुछ अक्सर बड़ी मात्रा में डेटा प्रिंट करते हैं - यानी एक खोज के परिणाम। क्या यह मेरे ऐप की गति में एक सराहनीय अंतर करेगा?क्या एनएसएलओजी मेरे ऐप को धीमा कर देगा?

मै मैक्रोज़ से परिचित नहीं हूं - क्या कोई ऐसा सुझाव दे सकता है जो सभी NSLogs को सक्षम/अक्षम करेगा?

+0

निश्चित रूप से एनएसएलओजी आपके ऐप को धीमा कर सकता है। यह स्पष्ट रूप से इस बात पर निर्भर करता है कि आप मैक्रो का कितना उपयोग करते हैं। अधिकांश लोग एक मैक्रो के कुछ बदलाव का उपयोग करते हैं जिसे किसी संकलन ध्वज या रनटाइम स्विच के साथ चालू/बंद किया जा सकता है। –

उत्तर

14

हाँ NSLog आपके सिंक्रनाइज़ेशन के कारण आपके ऐप को धीमा कर सकता है। सभी NSLog

#ifdef DEBUG 
#define NSLog(...) NSLog(__VA_ARGS__) 
#else 
#define NSLog(...) 
#endif 
+0

मेरी अज्ञानता को क्षमा करें। मैं उस कोड को कहां रखूंगा - और मैं डीबग के लिए मूल्य कहां सेट करूं? क्या मुझे यह घोषणा करने की ज़रूरत है कि एनएसएलओजी को कॉल करने वाली प्रत्येक फाइल में? – JoshDG

+1

@JoshDG आप इसे अपने प्रोजेक्ट की 'प्रोजेक्ट नेम-प्रीफिक्स.pch' फ़ाइल में रख सकते हैं। डिबगिंग के लिए निर्माण करते समय 'DEBUG' निरंतर XCode द्वारा स्वचालित रूप से परिभाषित किया जाता है। – pNre

+0

ओह शांत! धन्यवाद! – JoshDG

4

आपको MY CURRENT PREFIX.PCH FILE से DLog जैसे कुछ का उपयोग करना चाहिए। यह रिलीज बिल्ड में लॉगिंग अक्षम कर देगा। This एक महान स्पष्टीकरण है कि आपको रिलीज बिल्ड में NSLog क्यों नहीं रखना चाहिए।

1

टॉगल करने के लिए यदि आपके ऐप उत्पादन उन्हें कम करने की कोशिश के लिए है। त्रुटियों या संभावित चेतावनियों के लिए केवल उपयोगी रखें। यदि आपने उन्हें डीबग करने में मदद के लिए उपयोग किया है, तो मैं आपको उन्हें हटाने के लिए सलाह देता हूं।

0

हाँ !! बहुत सारे एनएसएलओजी निश्चित रूप से आपके ऐप को धीमा कर देंगे।

एक सबसे अच्छा अभ्यास मैं आमतौर पर मेरी .pch में इस ऐड (संकलित हेडर फाइल पूर्व) के रूप में

#ifdef DEBUG 
#define DebugLog(f, ...) NSLog(f, ## __VA_ARGS__) 
#else 
#define DebugLog(f, ...) 
#endif 

बस डिबग लक्ष्य के लिए निर्माण सेटिंग में अपनी पूर्वप्रक्रमक मैक्रो में डीबग सक्षम होना चाहिए। NSLog() के बजाय डीबग्लॉग का उपयोग करें।

आपके वितरण/रिलीज में DEBUG परिभाषित नहीं होगा। तो आपका ऐप वितरित ऐप के लॉग में कुछ भी प्रिंट नहीं करेगा।

संबंधित मुद्दे