2010-10-21 11 views
6

के बीच अंतर कोई भी कृपया मुझे बता सकता है कि initWithNibName का उपयोग कब करें और initWithCoder का उपयोग कब करें?initWithNibName और initWithCoder

उत्तर

2

एप्पल के प्रलेखन से:

InitWithCoder संग्रह करने के लिए एक वस्तु को कूटबद्ध। एक कोडर ऑब्जेक्ट को आमंत्रित करके ऐसा करने के लिए ऑब्जेक्ट को निर्देश देता है विथकोडर: या initWithCoder:। एन्कोडविथकोडर: ऑब्जेक्ट को प्रदान किए गए कोडर को इसके आवृत्ति चर को एन्कोड करने के लिए निर्देश देता है ...

InitWithNibName निर्दिष्ट बंडल में nib फ़ाइल में प्रारंभ की गई एक NSNib ऑब्जेक्ट देता है। निब फ़ाइल लोड होने के बाद, एनएसएनआईबी ऑब्जेक्ट निब द्वारा संदर्भित अतिरिक्त संसाधनों का पता लगाने के लिए बंडल के संसाधन मानचित्र का उपयोग करता है। यदि आपने बंडल पैरामीटर के लिए शून्य निर्दिष्ट किया है, तो NSNib ऑब्जेक्ट उन संसाधनों को उस फ़ाइल के लिए निब फ़ाइल फ़ाइल के मालिक से जुड़े बंडल में देखता है। अगर निब फ़ाइल में कोई मालिक नहीं है, तो NSNib ऑब्जेक्ट एप्लिकेशन के मुख्य बंडल में अतिरिक्त संसाधनों की तलाश करता है।

पूर्व का उपयोग आपके कोड में अलग-अलग ऑब्जेक्ट्स को एन्कोड करने के लिए किया जाता है, बाद में संसाधन वस्तुओं वाले एनएसएनआईबी फ़ाइल को पुनर्प्राप्त करने के लिए उपयोग किया जाता है।

5

initWithNibName: आमतौर पर व्यू कंट्रोलर ऑब्जेक्ट के साथ उपयोग किया जाता है। विचार यह है कि आपके पास एनआईबी फ़ाइल (या एक्सआईबी, एक ही चीज़) है जिसमें UIView (या NSView) है जिसे आप पहले ही इंटरफ़ेस बिल्डर में डिज़ाइन कर चुके हैं। जब आपका व्यू कंट्रोलर लॉन्च होता है, तो इसमें view प्रॉपर्टी और आउटलेट होता है जिसे आपको स्वयं आकर्षित करना होगा - सिवाय इसके कि आप इसे पहले से ही आईबी में डिज़ाइन कर चुके हैं। तो यह कन्स्ट्रक्टर आपको नए नियंत्रक ऑब्जेक्ट को आग लगाने की अनुमति देता है और यह बताता है कि एनआईबी फ़ाइल इसके विचार को देखने के लिए कहती है। यह सुनिश्चित करने के लिए कि यह सफल है, इस विषय से थोड़ा सा है, यह सुनिश्चित करने के लिए अपने एनआईबी को तारों की चर्चा करना।

initWithCoder: का एक और कार्य पूरी तरह से है। जब आपने encodeWithCoder: का उपयोग करके किसी ऑब्जेक्ट को क्रमबद्ध किया है, तो आपको अंततः इसे अपनी कक्षा के किसी ऑब्जेक्ट में बदलने के लिए डेटा को अनसुलझा (या, "डीकोड") करने की आवश्यकता होगी।

वैसे भी, रिकैप करने के लिए: यदि आप अपनी ऑब्जेक्ट NSCoding प्रोटोकॉल का समर्थन करना चाहते हैं तो आप केवल अपनी कक्षा पर encodeWithCoder: और initWithCoder: लागू करेंगे। जब आप किसी ऑब्जेक्ट को फायर करना चाहते हैं तो आप initWithNibName: (आमतौर पर इसे स्वयं लागू नहीं करते हैं) का उपयोग करते हैं जो एनआईबी फ़ाइल में संग्रहित ऑब्जेक्ट्स के साथ अपनी गुणों को प्रारंभ कर सकता है।

NSCodingover here का एक बहुत अच्छा दृश्य है।

+1

आह, ऐसा लगता है कि जॉर्डन पहले ही इसे नीचे खींचा गया है ;-) –

1

स्टोरीबोर्ड

आप के बाद से ही पूर्व शुरू हो जाती है जब से एक दृश्य लोड हो रहा है स्टोरीबोर्ड-initWithNibName को -initWithCoder: को प्राथमिकता देनी चाहिए।

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