2011-07-03 12 views
5

में रचनाकार बनाना बनाना उद्देश्य सी में रचनाकार बनाते समय हम हमेशा ऐसा क्यों करते हैं?उद्देश्य-सी

self = [super init]; 
if (self) { 
    //Initialization code here 
} 
+3

साथ उद्देश्य-सी में निर्माता और नाशक बना सकते हैं [कुछ शुरुआत ऑब्जेक्टिव-सी/iPhone के सवाल] (http: // stackoverflow.com/questions/710568/some-beginner-objective-c-iphone-questions) वही चीज़ अपने पहले भाग में पूछता है, और आपको बैरी के उत्तर को वहां पढ़ना चाहिए। विल शिपली के "स्वयं = [बेवकूफ init] भी देखें;" अधिक लेख: http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

बस पाया गया कि यह स्टैंडफ़ोर्ड आईओएस व्याख्यान के व्याख्यान 4 (लगभग 25 मिनट) में सबसे अच्छी तरह से समझाया गया है। – NSExplorer

उत्तर

7

हम self को पुन: असाइन क्योंकि [super init] भी उस पर बुलाया गया था से एक अलग वस्तु वापस जाने के लिए अनुमति दी है। हम if (self) क्योंकि [super init] को nil वापस करने की अनुमति है।

1

self कुछ सुपरक्लास पर आधारित एक वर्ग है (उदा। UIViewController, NSObject - यह सुनिश्चित करने के लिए अपनी इंटरफ़ेस फ़ाइल देखें)। सबक्लास को अपेक्षा के अनुसार काम करने के लिए सुपरक्लास को प्रारंभिकरण के कुछ रूप की आवश्यकता हो सकती है। तो पहले सुपरक्लास शुरू करने से हम सुनिश्चित करते हैं कि डिफ़ॉल्ट गुण और जैसे सेट हैं। सुपरक्लस को पहले शुरू किए बिना, हम कुछ अप्रत्याशित व्यवहार का अनुभव कर सकते हैं, खासकर अधिक जटिल वस्तुओं जैसे व्यू कंट्रोलर और इसी तरह।

+4

वास्तव में, एक init विधि में 'self' एक वर्ग नहीं है। यह वर्तमान वर्ग का एक प्रारंभिक उदाहरण है। – Chuck

+0

हाँ, सही। सुधारों के लिए धन्यवाद। –

9

आप सवाल

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //do something 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [super dealloc]; 
} 

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

  • कोई संबंधित समस्या नहीं^_^