2009-06-05 5 views
17

जब तक मैं कुछ याद नहीं कर रहा हूं, ऐसा लगता है कि .h फ़ाइल में मैंने प्रोटोकॉल परिभाषा डाली है। मैं यह भी सोच रहा हूं कि यह अपने आप में हो सकता है। एच फाइल ... (जावा में, यह अपनी फाइल में है)उद्देश्य-सी प्रोटोकॉल अपनी स्वयं की .h फ़ाइल में परिभाषित किया गया है?

उत्तर

3

मुझे लगता है कि जब तक इसे कहीं परिभाषित किया गया है और आप इनमें से किसी एक फाइल में शामिल हैं संकलन, यह परिभाषित किया गया है। उद्देश्य-सी में "ClassName.java" जैसे कोई सम्मेलन नहीं हैं जैसे कि जावा में है।

यह बहुत उपयोगी है जब आप categories जैसी चीजें निजी विधियों/गुणों जैसी चीजों के लिए करना चाहते हैं।

-1

उद्देश्य-सी में समान है। चूंकि प्रोटोकॉल उन विधियों की एक सूची है जो कक्षाओं के बीच साझा की जाती हैं। प्रोटोकॉल केवल इसी तरह के कार्यान्वयन के बिना विधियों की सूची है। वे किसी और द्वारा लागू किए जाने वाले हैं।

3

प्रोटोकॉल आमतौर पर अपने स्वयं के .h फ़ाइल (मेरे अनुभव में) में परिभाषित किए जाते हैं। लेकिन उन्हें एक साझा एच फ़ाइल में परिभाषित किया जा सकता है। प्रोटोकॉल के उपयोगकर्ताओं को साझा फ़ाइल व्यवस्था में प्रोटोकॉल को अपनाने की अनुमति देना मुश्किल होगा और इसके अलावा, यह आपके एपीआई को अव्यवस्थित करेगा। प्रोटोकॉल अपने स्वयं के .h फ़ाइल में है, तो दस्तावेज़ीकरण और उपयोग संभवतः आसान होगा।

इसके अलावा, पॉलिमॉर्फिक कार्यान्वयन जैसी चीजों के लिए आपके प्रोटोकॉल का उपयोग करना कम ओवरहेड होगा यदि आपको केवल एक .h फ़ाइल के बजाय प्रोटोकॉल .h फ़ाइल शामिल करने की आवश्यकता है जिसमें अन्य वर्ग घोषणाएं हों। मैं सटीक लागत/इस विचार की बचत पर यकीन नहीं है, लेकिन मैं वहाँ पढ़ा है कुछ होगा (छोटे द्विआधारी?)

सादर, फ्रैंक

19

मुझे लगता है कि प्रोटोकॉल के स्थान पर निर्भर करता है आप इसका उपयोग कैसे कर रहे हैं बहुत समय, एक प्रोटोकॉल का उपयोग किसी अन्य वर्ग के लिए किसी प्रतिनिधि या डेटा स्रोत की कार्यक्षमता को परिभाषित करने के लिए किया जाता है। यदि ऐसा है, तो मुझे लगता है कि आप सुरक्षित रूप से अन्य वर्ग के शीर्ष पर प्रोटोकॉल परिभाषा डाल सकते हैं - क्योंकि वे एक साथ उपयोग करने के लिए बाध्य हैं।

यदि आप किसी साझा बेस क्लास के स्थान पर प्रोटोकॉल को परिभाषित कर रहे हैं, तो आपको शायद इसे एक अलग फ़ाइल में रखना चाहिए। उदाहरण के लिए, मेरे पास "ऑपरेशन" प्रोटोकॉल को लागू करने वाले कई अलग-अलग वर्ग हैं। मेरे कुछ अन्य कार्यों में प्रोटोकॉल को लागू करने वाली वस्तु प्राप्त करने की उम्मीद है और वास्तविक कक्षाओं के बारे में बहुत अधिक परवाह नहीं है। उस स्थिति में, प्रोटोकॉल परिभाषा को अपनी शीर्ष लेख फ़ाइल में रखना समझ में आता है ताकि आप इसे अपने आप में शामिल कर सकें।

बेनी सही है, हालांकि - यह तकनीकी रूप से परिभाषित चाहे आप इसे कहां रखें (जब तक इसे इसके उपयोग से पहले कहीं भी शामिल किया गया हो)।

+0

मैं कोड समीक्षा पर काम कर रहा था जहां मुझे कक्षाओं की संख्या में एक प्रोटोकॉल दोबारा लिखा गया, मैं प्रोटोकॉल को परिभाषित करने के लिए एक अलग फ़ाइल बना रहा हूं। लेकिन उस फाइल को आयात करने में चूक गई। आपका उत्तर "(जब तक इसे इसके उपयोग से पहले कहीं भी शामिल किया गया हो)।" धन्यवाद + – Alok

0

उद्देश्य-सी में यह वास्तव में शैली का विषय है। मुझे लगता है कि वास्तव में "उचित" तरीका प्रोटोकॉल के लिए एक अलग .h फ़ाइल बनाने के लिए है, और यदि मैं एक प्रोटोकॉल बना रहा था जो किसी और चीज से संबंधित नहीं था (उदाहरण के लिए एनएससीओडीिंग) जो मैं करता हूं। दूसरी तरफ, अधिकांश समय जब मैं प्रोटोकॉल (या एक अनौपचारिक प्रोटोकॉल, NSObject पर एक श्रेणी का उपयोग करके) बनाता हूं, तो यह किसी अन्य वर्ग से जुड़ा हुआ है, जैसे एनएसटीबल व्यू के डेटा स्रोत अनौपचारिक प्रोटोकॉल। इन परिस्थितियों में, मैंने सादगी के लिए उस वर्ग की हेडर फ़ाइल में घोषणा की है।

0

ऐप्पल के Communicating with Objects को भी देखें, जो प्रतिनिधि, प्रोटोकॉल और चयनकर्ताओं पर चर्चा करता है। हालांकि यह मैक ओएस एक्स के तहत सूचीबद्ध है, हालांकि अधिकांश (यदि नहीं सभी) आईओएस पर भी लागू होते हैं।

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