2012-09-17 13 views
6

इसके लिए खोज में मुझे केवल अन्य भाषाओं के लिए जानकारी मिल सकती है। मैं इस तरह के रूप सशर्त statments लिखने के लिए सबसे अच्छा अभ्यास जानना चाहूंगा:एक्सकोड - सशर्त विकास या उत्पादन मोड

if (DEV_MODE){ 
    //do something 
}else{ 
    //do the real stuff 
} 

और फिर कुछ वैश्विक फ़ाइल में चालू या बंद DEV_MODE की स्थापना तो मैं केवल पर है कि बदलने के लिए या बंद करने के बजाय कई में कोड बदलने की करने के लिए है स्थानों। मेरे पास कुछ विचार हैं लेकिन ऐसा करने के सर्वोत्तम तरीके पर सलाह ढूंढ रहे हैं।

+0

क्या आप संकलन समय पर 'DEV_MODE' निर्धारित करना चाहते हैं? या आप बिना किसी संकलन के रन रन पर 'DEV_MODE' को बदलने में सक्षम होना चाहते हैं? –

उत्तर

14

इस प्रयास करें:

#ifdef DEBUG 
    // do stuff 
#endif 

वर्तमान एक्सकोड का संस्करण स्वचालित रूप से नई परियोजनाओं में इस मैक्रो को सेट करता है। सुनिश्चित करने के लिए अपनी परियोजनाओं पर सेटिंग्स बनाएं। यदि यह वहाँ नहीं है तो आप इसे अपने आप को जोड़ने के लिए:

enter image description here

+0

हां, मेरी सेटिंग्स इसे प्रतिबिंबित करती हैं। तो मुझे कभी भी कुछ भी सही नहीं बदलना पड़ेगा? मुझे लगता है कि जब मैं ऐपस्टोर योजना का उपयोग करता हूं DEBUG स्वचालित रूप से 0 होगा। स्पष्टीकरण के लिए – soleil

0

आपकी प्रोजेक्ट सेटिंग्स में "प्रीप्रोसेसर मैक्रोज़" नामक एक अनुभाग है। उस खंड में आप अपने डीबग बिल्ड जैसे "DEV_MODE" या जो कुछ भी चाहते हैं, के लिए एक स्ट्रिंग जोड़ सकते हैं। फिर आप ऊपर सूचीबद्ध अपनी स्थितियों को कर सकते हैं और जब आपका ऐप "रिलीज" या किसी अन्य सेटिंग के लिए बनाया जाता है जिसमें आपका मैक्रो नहीं होता है तो आपकी जांच विफल होनी चाहिए।

1

प्रीप्रोसेसर चर आप क्या चाहते हैं, में अपने निर्माण विन्यास एक चर (उदाहरण के लिए DEV_MODE) को परिभाषित है, और फिर जैसे पूर्वप्रक्रमक चेकों का उपयोग करें:

#if DEV_MODE 
    //dev mode code 
#else 
    //non-dev mode code 
#endif 
+0

'DEBUG' का उपयोग करने के लिए बेहतर, यह डिफ़ॉल्ट रूप से एक्सकोड द्वारा परिभाषित/अपरिभाषित है (बेशक यह किसी अन्य आईडीई/कमांड लाइन टूलचेन का उपयोग करने वाला मामला नहीं है)। –

8

(। यह सवाल को Xcode संबंधित नहीं है)

जिसके अनुसार, बजाय सी शैली आईएफएस के साथ अपने कोड प्रदूषण की, आप डीबग और रिलीज मोड को फ़िल्टर करने के लिए प्रीप्रोसेसर निर्देशों का उपयोग कर सकते हैं। जहां तक ​​मुझे पता है, परीक्षण मोड में DEBUG मैक्रो से 1 को परिभाषित करने के लिए यह एक आम प्रथा है, और इसे रिलीज़ मोड में परिभाषित नहीं करना है। (इसके अलावा, एक्सकोड आपके लिए यह परिभाषित कर सकता है, मैंने देखा है कि इस व्यवहार पर भरोसा किया गया है।) कारण यह है कि प्रीप्रोसेसर का उपयोग अधिक पठनीय है, क्योंकि यह इंडेंटेशन में नहीं आता है, यह बेहतर से अलग है कोड दृष्टि से। सारांश में, पूर्वप्रक्रमक मैक्रो के लिए

#ifdef DEBUG 
    // do debug stuff here 
#else 
    // do release stuff here 
#endif 

एक अतिरिक्त तर्क की कोशिश है कि आप, वैश्विक नामस्थान conditionalize कर सकते हैं जो आप सी कोड के भीतर नहीं कर सके। I. ई।, प्रीप्रोसेसर मैक्रोज़ के साथ, आप

#ifdef DEBUG 
    int functionOne() 
    { 
    } 
#else 
    char *functionTwo(int a) 
    { 
    } 
#endif 

लिख सकते हैं आप प्रीप्रोसेसर के बिना ऐसा नहीं कर सके।

+0

धन्यवाद। – soleil

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