आप NSNumber
का उल्लेख है, यह किसी भी प्रत्यक्ष उपवर्गों नहीं है, तो यह सुरक्षित है numberWithInt:
(जैसे NSSet
के रूप में और अन्य वर्गों) वापसी प्रकार id
क्योंकि वे उपवर्गों हो सकता है एक NSNumber*
NSString*
वापस जाने के लिए के लिए (NSMutableString
और NSMutableSet
क्रमशः), जो इस विधि का वारिस करेगा। इस प्रकार, इन विरासत में कॉलों को सबक्लास के प्रकार का एक उदाहरण वापस करने की आवश्यकता होती है, और विधि नामकरण के नियमों के कारण, आप अकेले रिटर्न प्रकार के आधार पर ओवरलोड नहीं कर सकते हैं। इस प्रकार, उन्हें उन सभी के बीच एक सामान्य प्रकार की आवश्यकता है, जो id
है।
अद्यतन: हालिया घटनाओं का अर्थ कीवर्ड instancetype
अब उपलब्ध है। आपने देखा होगा कि id
के कई संदर्भ अब instancetype
के साथ प्रतिस्थापित किए गए हैं। यह कीवर्ड कंपाइलर को एक संकेत प्रदान करता है कि विधि का रिटर्न प्रकार विधि के प्राप्तकर्ता का एक ही वर्ग है।
NSArray:
- (instancetype)initWithArray:(NSArray*)array;
NSMutableArray:
// Inherits from NSArray
----
// Receiver is NSArray, method belongs in NSArray, returns an NSArray
[[NSArray alloc] initWithArray:@[]];
// Receiver is NSMutableArray, method belongs in NSArray, returns an NSMutableArray
[[NSMutableArray alloc] initWithArray:@[]];
उपवर्गीकरण के लिए:
उदाहरण के लिए (और मैं एक उदाहरण के तनाव, इस वास्तविक ढांचे में ऐसा नहीं हो सकता है)। 'NSMutableString' उस मामले में एक कलाकार की आवश्यकता होगी। –
हाँ, मैं सहमत हूं - आप एक टैप नृत्य कर सकते हैं कि यह किस तरह से है, लेकिन आखिरकार यह समझ में नहीं आता है। –