2010-08-16 22 views
9

हाल ही में मुझे एहसास हुआ कि मुझे एक सहायक वर्ग के लिए इनिट विधि में एक तर्क जोड़ने की आवश्यकता है। सहायक वर्ग सतर्क विचारों से संबंधित है, इसलिए इसमें पहले से ही इनिट में तर्कों का एक गुच्छा है, जिसे देखा जाता है, tweaked, और फिर अलर्ट व्यू पर भेजा जाता है।क्या यह एक init विधि में, एक init विधि को कॉल करना ठीक है?

चूंकि मैं विभिन्न स्थानों पर विधि का उपयोग कर रहा हूं, इसलिए मैं क्रैशिंग का जोखिम नहीं लेना चाहता हूं (उन स्थानों में से किसी एक को खोकर और एक ग्राहक के हाथों में 'अपरिचित चयनकर्ता' प्राप्त करना) इसलिए मैंने फैसला किया एक दूसरी init विधि जोड़ने के लिए।

आईई।

- (id)initWithA:B:C:D: 

और

- (id)initWithA:B:C:foo:D: 
अभी मैं बस foo में पहले एक के कार्यान्वयन चिपकाया कॉपी किया है

: एक है, लेकिन आदर्श क्या अच्छा दूसरा फोन पहले बना रही है हो सकता है, यानी

- (id)initWithA:a B:b C:c D:d 
{ 
    return [self initWithA:a B:b C:c foo:nil D:d]; 
} 

लेकिन मुझे यकीन नहीं है कि यह स्वीकार्य है या नहीं। कोड ठीक काम कर रहा प्रतीत होता है।

उत्तर

16

हां, यह पूरी तरह स्वीकार्य है और वास्तव में काफी आम है।

यही कारण है कि हमारे पास "Designated Initializer" नामक चीजें हैं। यह प्रारंभकर्ता विधि है जिसके लिए अन्य सभी प्रारंभकर्ता पुनर्निर्देशित होते हैं (आमतौर पर)।

+0

वाह, कुछ पूछने से पहले निश्चित रूप से और अधिक खोजना होगा। आपका बहुत बहुत धन्यवाद! स्पष्ट रूप से स्वीकार करने से पहले 10 मिनट का इंतजार करना होगा। जल्द ही स्वीकार करेंगे। – Kalle

+5

@ केएल सैद्धांतिक रूप से सभी उत्तर दस्तावेज में हैं। हालांकि यह अभी भी प्रश्न पूछने के लायक है (आमतौर पर) ताकि अन्य लोग भविष्य में जानकारी आसानी से पा सकें। :) –

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