2011-07-18 10 views
10

संभव डुप्लिकेट:
In Objective-C why should I check if self = [super init] is not nil?क्यों [सुपर init] शून्य वापस आ जाएगा, जब "सुपर" NSObject है?

ऑब्जेक्टिव-सी किताब मैं पढ़ रहा हूँ में, यह कहा जाता है [init] संदेश NSObject के लिए भेजा जाता है, इस अवसर पर यह nil लौट सकते हैं और हम ऐसा करना चाहिए सकता है कि nil होने पर क्या हो सकता है, इस पर अधिक संदेश भेजने से पहले, वापसी मूल्य की जांच करें।

self = [super init]; 

if (self) { 
do stuff 
} 

मैं तुम्हें हालांकि पूछते हैं, क्या होने के लिए एक NSObject को init खुद करने में सक्षम नहीं की जरूरत है?

संपादित करें: प्रश्न विशेष रूप से एक उदाहरण से संबंधित है जहां YourClass: NSObject।

+0

मेरा प्रश्न उस मामले के लिए विशिष्ट है जहां आपकी कक्षा की सुपर क्लास NSObject स्वयं है। – JAM

+0

अन्य प्रश्न उस मामले को शामिल करते हैं, और इसमें कई वाकई उत्कृष्ट उत्तर हैं। –

उत्तर

8

NSObject खुद init पर कभी भी शून्य नहीं लौटाएगा, हालांकि इससे प्राप्त होने वाले अन्य वर्गों को शायद init के वापसी मूल्य की जांच करने के लिए अच्छा अभ्यास माना जाता है। उदाहरण के लिए, यह शून्य वापस आ जाएगा:

[[NSData alloc] initWithContentsOfFile:@"path/to/a/file/that/does/not/exist"]; 
+0

धन्यवाद! मुझे लगता है कि कक्षाओं के लिए जहां '[सुपर इनिट]' कभी नहीं 'शून्य है, यह चेक रखना अनावश्यक है। इस तरह, उदाहरण के लिए: 'वापसी [सुपर initWithFoo: एक्स बाज़: वाई]; ' –