जब भी अच्छा/बुरा अभ्यास माना जाता है, तो यह कम या ज्यादा व्यक्तिपरक होता है। कुछ करते समय मूल रूप से सही/गलत है, यह कम या कम उद्देश्य है।
isKindOfClass:
कक्षा विरासत की जांच करने के लिए एक उपयोगी तरीका है। यह एकमात्र प्रश्न का उत्तर देता है, "एक वर्ग का उद्देश्य है जो किसी दिए गए वर्ग का (उप-वर्ग) है?"। यह किसी अन्य प्रश्न का उत्तर नहीं देता है जैसे "क्या यह ऑब्जेक्ट उस विधि को अपने तरीके से कार्यान्वित करता है?" या "क्या मैं एक्स या वाई के लिए ऑब्जेक्ट का उपयोग कर सकता हूं?"। यदि आप इरादे से isKindOfClass:
का उपयोग करते हैं, तो आपको कोई समस्या नहीं होगी। आखिरकार, गतिशील टाइप की गई भाषा में आपको ऑब्जेक्ट्स के बारे में मेटा जानकारी निकालने के लिए टूल होना चाहिए। isKindOfClass:
उपलब्ध उपकरणों में से एक है।
तथ्य यह है कि कुछ वस्तुएं अपनी कक्षा के बारे में झूठ बोल सकती हैं, आपको वास्तव में बंद नहीं करना चाहिए। वे खुद को किसी भी वर्ग को तोड़ने के बिना किसी अन्य वर्ग की वस्तुओं के रूप में छिपाते हैं। और अगर वह कुछ भी तोड़ता नहीं है, तो मुझे क्यों परवाह करना चाहिए?
मुख्य बात यह है कि आपको हमेशा किसी भी उद्देश्य के लिए सही उपकरण का उपयोग करना याद रखना चाहिए। उदाहरण के लिए, isKindOfClass:
respondsToSelector:
या conformsToProtocol:
के लिए कोई विकल्प नहीं है।
आत्मनिरीक्षण उपकरण का उपयोग करने की आवश्यकता से बचने के लिए श्रेणियों में कार्यान्वयन विधियों को मेरे लिए बदतर लगता है। iE NSJSONSerialization की 'JSONObjectWithData: विकल्प: त्रुटि:' विभिन्न प्रकारों को वापस कर सकता है। (ऐरे, शब्दकोश)।सरणी में हैकिंग डिक्शनरी विधि और इसके विपरीत बेहद बेवकूफ ध्वनि। – vikingosegundo
क्या होगा अगर केवल एक उपclass के पास एक विधि होनी चाहिए? –
यदि केवल एक उप-वर्ग के पास कोई विधि होनी चाहिए, तो बेस क्लास में एक डिफ़ॉल्ट कार्यान्वयन के साथ एक विधि है जो कुछ भी नहीं करता है, और सबक्लास में एक ओवरराइड विधि जो कुछ करता है। –