2009-06-17 10 views
6

क्या इससे कोई फर्क पड़ता है कि क्या मैं सुपर क्लास की पहली चीज़ या अंत में विधि कहता हूं? उदाहरण के लिएक्या ऑब्जेक्टिव सी में सुपर क्लास पदार्थ की विधि को कॉल करने का समय है?

-(void)didReceiveMemoryWarning { 
    /* do a bunch of stuff */ 

    [super didReceiveMemoryWarning]; 
} 

बनाम

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

viewWillAppear, willRotateToInterfaceOrientation आदि जैसे अन्य तरीकों के लिए एक ही प्रश्न

मैं सार्थक मतभेद, बस शैलीगत, या दार्शनिक नहीं रहा हूँ (हालांकि उन का स्वागत है भी)।

उत्तर

6

ठेठ कोको सम्मेलन:

  1. आप सेटअप प्रदर्शन कर रहे हैं, तो फोन सुपर पहली
  2. हैं आप टियरडाउन कर रहे हैं, सुपर लास्ट
पर कॉल कर रहे हैं

तो, प्रारंभिकरण, viewDidLoad, आदि .. पहले मामले में आते हैं। मेमोरी चेतावनियां, viewDidUnload, और dealloc दूसरे मामले के तहत गिरते हैं।

आपको इस कक्षा का पालन करने के लिए अपनी कक्षाएं भी डिजाइन करनी चाहिए। किसी भी विचलन विशेष रूप से ध्यान दिया जाना चाहिए।

संबंधित तो जवाब:

`[super viewDidLoad]` convention


जोड़ने के लिए: औचित्य सेटअप के दौरान सुपर पहले फोन करने के लिए, कि क्या आप वाकई सब कुछ जगह में है इससे पहले कि आप कार्यक्षमता बढ़ाने बनाना चाहते है। अनुशासनिक यह है कि जब आप विघटित होते हैं, तो आप नहीं चाहते हैं कि कोई सुपरक्लास इवर आपके उप-वर्ग को संभालने का मौका मिलने से पहले इसे हटा दिया जाए।

यह यूआई अपडेट के संदर्भ में और नीचे दी गई टिप्पणियों में उल्लिखित है।

+0

आप उस मूल्यांकन में willRotateToInterfaceOrientation को वर्गीकृत कैसे करेंगे? – fnCzar

+2

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

6

यह कार्यक्षमता पर निर्भर करता है, आप सुपर क्लास की चीज़ या इससे पहले कुछ करने के बाद कुछ करना चाहते हैं।

उदाहरण के लिए यदि सुपरक्लास में कुछ यूआई तत्व हैं और आप इसे बढ़ाते हैं और आपकी कक्षा में कुछ और यूआई तत्व होंगे। अपने पूरे ऑब्जेक्ट को फिट करने के लिए आकार प्राप्त करने के लिए आप शायद अपने तत्वों के आकार की गणना करने के लिए सुपर क्लास को कॉल करेंगे और फिर आप उस आकार को आपके द्वारा जोड़े गए तत्वों के आकार में जोड़ देंगे।

यह अन्यथा समझ में नहीं आता है - सुपर क्लास आपके तत्वों से अवगत नहीं है, इसलिए यह आपकी गणना को ओवरराइट कर देगा। फिर, यह कार्यान्वयन पर निर्भर करता है।

वहाँ एक विशिष्ट मामले जहां आखिरी बात के रूप में सुपर विधि कॉल करने की जरूरत है:

-(void)dealloc 
{ 
    ... 
    [super dealloc]; 
} 
संबंधित मुद्दे