2009-08-15 4 views
10

क्या कोई अच्छा कारण है कि मुझे ऐसा कुछ क्यों नहीं करना चाहिए? उदाहरण:[MyClass alloc] और [[self class] alloc] के बीच अंतर कहां है?

मेरे पास कक्षा MyClass है।

- (id)copyWithZone:(NSZone*)zone { 
    MyClass *copy = [[MyClass allocWithZone:zone] init]; 
    copy.someproperty = [[self.someproperty copy] autorelease]; 
    return copy; 
} 
इसके बजाय इस बात का

, मैं एक टुकड़ा है कि इस तरह दिखता है पाया: वहाँ में मैं इस कार्यान्वयन है

- (id)copyWithZone:(NSZone*)zone { 
    MyClass *copy = [[[self class] allocWithZone:zone] init]; 
    copy.someproperty = [[self.someproperty copy] autorelease]; 
    return copy; 
} 

अंतर यह है कि पहले एक बस नाम अपने ही वर्ग करता है, तो उपयोग करता है, है मानवीय रूप से पठनीय जैसे कि यह कोई अन्य वर्ग था। और दूसरा व्यक्ति स्वयं से पूछता है कि कौन सी कक्षा है। क्या इससे कोई फर्क पड़ता है, या इस मामले में उपयोग करने के लिए पूरी तरह से ठीक है?

उत्तर

10

यदि आप MyClass उपclass करते हैं, तो -copyWithZone: का दूसरा उदाहरण सबक्लास का एक उदाहरण देता है। पहला उदाहरण नहीं है, यह MyClass का उदाहरण देता है।

+0

तो उसी वर्ग के उदाहरण को बनाने के इच्छुक वर्ग के अंदर, किसी को हमेशा [द क्लास एलोक] के बजाय [[स्वयं वर्ग] आवंटन] को कॉल करना चाहिए? –

+0

यह इस बात पर निर्भर करता है कि उप-वर्ग उस विधि से निपटना चाहिए या नहीं। इन-कॉपीपीथज़ोन: एक सबक्लास आपकी विधि को सुपर के माध्यम से कॉल कर सकता है, अतिरिक्त कॉन्फ़िगरेशन कर सकता है और फिर परिणाम वापस कर सकता है। इसलिए [स्वयं वर्ग] का उपयोग करना बेहतर है। –

+0

एक सबक्लास को इसे सुपर के माध्यम से कॉल करने की आवश्यकता नहीं है। यदि उप-वर्ग में अपने स्वयं के कोई अतिरिक्त चर नहीं हैं, तो यह बिना किसी अतिरिक्त काम – user102008

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

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