2009-04-21 11 views
15

में उद्देश्य सी में एक विधि को ओवरराइड करता है, यदि आप कुछ सबक्लासिंग कर रहे हैं, और सुपरक्लास पर किसी विधि को ओवरराइड करने की योजना बना रहे हैं, तो क्या आपको अपने उपclass @interface में सुपरक्लास विधि को फिर से घोषित करना चाहिए?उद्देश्य सी सबक्लास जो सुपरक्लास

उदाहरण के लिए, यदि आप UIViewController (जैसे MyViewController) उपवर्गीकरण हैं, और आप "viewDidLoad" ओवरराइड करने के लिए योजना बना रहे हैं आपको लगता है कि विधि अपने MyViewController @interface घोषणा में शामिल होना चाहिए, या बस MyViewController.m में इसे लागू?

उदाहरणों में मैंने देखा है, मैंने इसे दोनों तरीकों से देखा है (आपके उप-वर्ग इंटरफ़ेस में विधि को फिर से घोषित करना, या विधि को फिर से घोषित नहीं करना)। कोई कार्यात्मक अंतर नहीं हो सकता है, लेकिन सबसे अच्छा अभ्यास क्या है?

उत्तर

26

मैं अक्सर उन विधियों की घोषणा करता हूं जिन्हें मैं सार्वजनिक हेडर या कम से कम एक निजी श्रेणी में ओवरराइड करने की योजना बना रहा हूं। इसका लाभ यह है कि यदि आप वास्तव में विधि को ओवरराइड करना भूल जाते हैं तो आपको अपूर्ण श्रेणी परिभाषा चेतावनी मिल जाएगी ... जो समय-समय पर काम में आती है।

के लिए सार्वजनिक हेडर में रखने के लिए, यह बहुत ही व्यक्तिपरक और शायद आपकी/आपकी टीम की कोडिंग शैलियों तक है। यदि मैं विधि को करने के लिए क्या करने जा रहा हूं या विधि के सुपर क्लास के संस्करण का आह्वान न करने की योजना बना रहा हूं, तो मैं आमतौर पर केवल सार्वजनिक हेडर में एक विधि को फिर से शुरू करता हूं।

+12

+1 यह समझ में आता है। किसी को "कोको (ए)" जैसे नाम से पता होना चाहिए कि वह क्या कर रहा है। –

+0

सुपरक्लास के कार्यान्वयन के बावजूद आपको अपूर्ण परिभाषा चेतावनी मिलती है? मुझे यह नहीं पता था; हमेशा सोचा कि सुपरक्लास में पहले से मौजूद एक विधि घोषित करना अनावश्यक था, चाहे आप इसे ओवरराइड करते हैं या नहीं। –

+1

@ranReloaded यदि आप विशेष रूप से विधि को फिर से घोषित करते हैं तो आपको केवल चेतावनी मिलती है। असल में, जब आप ऐसा करते हैं, तो आप संकलक को बता रहे हैं कि आप विधि को फिर से लागू करने की योजना बना रहे हैं और यह आपको चेतावनी देने के लिए कह रहे हैं कि आपने ऐसा नहीं किया है। –

5

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

लेकिन अगर हम घोषणा की प्रतिलिपि बना रहे हैं, तो मैं व्यक्तिगत रूप से विधियों को फिर से शुरू करना पसंद नहीं करता हूं। यह DRY नहीं है और यह आपके हेडर को अनावश्यक रूप से फहराता है। कम कोड बेहतर कोड है।

+0

भी एक अच्छा बिंदु –