2012-04-22 12 views
6

मेरे पास कुछ अलग-अलग दृश्यों में कोडित कुछ स्थिरांक हैं नियंत्रक और एनएसओब्जेक्ट कक्षाएं एटीएम। मेरे काम के लोगों में से एक ने कहा कि मुझे उन्हें अपने स्वयं के वर्ग (यानी एक स्थिरांक वर्ग) में रखना चाहिएउद्देश्य सी स्थिरांक वर्ग

मैं सोच रहा हूं कि इस प्रकार के डिज़ाइन के प्रो और कॉन क्या होंगे और यदि ऐसा कुछ भी हो यह कैसे करना है इस पर कोई स्पष्टीकरण किया जाएगा।

उदाहरण के लिए, क्या मैं अभी एक नया एनएसओब्जेक्ट क्लास बना रहा हूं और इसमें # डिफाईन्स का समूह है? तो जब मुझे उनका उपयोग करने की ज़रूरत है तो क्या मैं सिर्फ अपने स्थिरांक वर्ग को उप-वर्गीकृत करता हूं और इस वर्ग के अंदर स्थिरांक का उपयोग करता हूं जैसे कि मैं किसी अन्य विधि या किसी अन्य वर्ग से परिवर्तनीय हूं?

अर्थात

myclass.theConstant 

किसी भी मदद की बहुत appreicated होगा।

+1

मंजुनाथ ने यहां एक उत्कृष्ट उत्तर पोस्ट किया: http://stackoverflow.com/a/2377432/1218605 –

उत्तर

11

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

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

कॉन्स्टेंट आमतौर पर विधियों या परिभाषित नहीं होते हैं। वे ऊपर की तरह स्थिर स्थिरता हैं। आपको जहां भी संभव हो # डिफाईन से बचना चाहिए, लेकिन कुछ जगहें काफी उपयोगी हैं (जैसे स्थिर UIColor ऑब्जेक्ट्स, जो अन्यथा आरंभ करने के लिए निराशाजनक हैं)।

उदाहरण देखने के लिए ऐप्पल हेडर फ़ाइलों में थोड़ा समय बिताएं। स्थिरता को आम तौर पर परिभाषित करने के तरीके के कुछ अच्छे उदाहरणों के लिए UIWindow.h, UITableViewCell.h, और UITableView.h में देखें।

+0

ठीक है, आपके उत्तर के लिए धन्यवाद। # खराब क्यों है? जिज्ञासा के कारण। –

+0

मैं यह भी सोच रहा हूं कि क्यों स्थिरांक स्थिरता के लिए खराब हैं। क्या यह प्रकार की सुरक्षा की कमी के कारण है? – borrrden

+4

स्कोपिंग। सुरक्षा टाइप करें। डीबगर में मूल्यांकन किया जा सकता है। बेहतर जानकारी छुपाएं। निरंतर बदलना पूरे कार्यक्रम को पुन: सम्मिलित करने की आवश्यकता नहीं है। परिभाषित होने पर दिमागी झुकाव संकलन समस्याओं से बचें जब गलती से परिभाषित किया जाता है। अपवाद हैं जहां # परिभाषा की आवश्यकता है और कुछ मामलों में पसंदीदा है। लेकिन आपका डिफ़ॉल्ट ऑब्जेक्टिव-सी में अपना कोड लिखना चाहिए, न कि प्रीप्रोसेसर मैक्रो भाषा में। फिर, ऐप्पल एसडीके देखें और आपको बहुत विशिष्ट मामलों (जैसे एनएसएएसएसर्ट) को छोड़कर # डिफाइन की एक विशिष्ट कमी दिखाई देगी। –

0

यदि आपके पास #defines है तो उन्हें किसी भी कक्षा में होने की आवश्यकता नहीं है - बस उन्हें अपनी स्वयं की .h फ़ाइल में चिपकाएं।

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