जब तक मैं कुछ याद नहीं कर रहा हूं, ऐसा लगता है कि .h फ़ाइल में मैंने प्रोटोकॉल परिभाषा डाली है। मैं यह भी सोच रहा हूं कि यह अपने आप में हो सकता है। एच फाइल ... (जावा में, यह अपनी फाइल में है)उद्देश्य-सी प्रोटोकॉल अपनी स्वयं की .h फ़ाइल में परिभाषित किया गया है?
उत्तर
मुझे लगता है कि जब तक इसे कहीं परिभाषित किया गया है और आप इनमें से किसी एक फाइल में शामिल हैं संकलन, यह परिभाषित किया गया है। उद्देश्य-सी में "ClassName.java" जैसे कोई सम्मेलन नहीं हैं जैसे कि जावा में है।
यह बहुत उपयोगी है जब आप categories जैसी चीजें निजी विधियों/गुणों जैसी चीजों के लिए करना चाहते हैं।
उद्देश्य-सी में समान है। चूंकि प्रोटोकॉल उन विधियों की एक सूची है जो कक्षाओं के बीच साझा की जाती हैं। प्रोटोकॉल केवल इसी तरह के कार्यान्वयन के बिना विधियों की सूची है। वे किसी और द्वारा लागू किए जाने वाले हैं।
प्रोटोकॉल आमतौर पर अपने स्वयं के .h फ़ाइल (मेरे अनुभव में) में परिभाषित किए जाते हैं। लेकिन उन्हें एक साझा एच फ़ाइल में परिभाषित किया जा सकता है। प्रोटोकॉल के उपयोगकर्ताओं को साझा फ़ाइल व्यवस्था में प्रोटोकॉल को अपनाने की अनुमति देना मुश्किल होगा और इसके अलावा, यह आपके एपीआई को अव्यवस्थित करेगा। प्रोटोकॉल अपने स्वयं के .h फ़ाइल में है, तो दस्तावेज़ीकरण और उपयोग संभवतः आसान होगा।
इसके अलावा, पॉलिमॉर्फिक कार्यान्वयन जैसी चीजों के लिए आपके प्रोटोकॉल का उपयोग करना कम ओवरहेड होगा यदि आपको केवल एक .h फ़ाइल के बजाय प्रोटोकॉल .h फ़ाइल शामिल करने की आवश्यकता है जिसमें अन्य वर्ग घोषणाएं हों। मैं सटीक लागत/इस विचार की बचत पर यकीन नहीं है, लेकिन मैं वहाँ पढ़ा है कुछ होगा (छोटे द्विआधारी?)
सादर, फ्रैंक
मुझे लगता है कि प्रोटोकॉल के स्थान पर निर्भर करता है आप इसका उपयोग कैसे कर रहे हैं बहुत समय, एक प्रोटोकॉल का उपयोग किसी अन्य वर्ग के लिए किसी प्रतिनिधि या डेटा स्रोत की कार्यक्षमता को परिभाषित करने के लिए किया जाता है। यदि ऐसा है, तो मुझे लगता है कि आप सुरक्षित रूप से अन्य वर्ग के शीर्ष पर प्रोटोकॉल परिभाषा डाल सकते हैं - क्योंकि वे एक साथ उपयोग करने के लिए बाध्य हैं।
यदि आप किसी साझा बेस क्लास के स्थान पर प्रोटोकॉल को परिभाषित कर रहे हैं, तो आपको शायद इसे एक अलग फ़ाइल में रखना चाहिए। उदाहरण के लिए, मेरे पास "ऑपरेशन" प्रोटोकॉल को लागू करने वाले कई अलग-अलग वर्ग हैं। मेरे कुछ अन्य कार्यों में प्रोटोकॉल को लागू करने वाली वस्तु प्राप्त करने की उम्मीद है और वास्तविक कक्षाओं के बारे में बहुत अधिक परवाह नहीं है। उस स्थिति में, प्रोटोकॉल परिभाषा को अपनी शीर्ष लेख फ़ाइल में रखना समझ में आता है ताकि आप इसे अपने आप में शामिल कर सकें।
बेनी सही है, हालांकि - यह तकनीकी रूप से परिभाषित चाहे आप इसे कहां रखें (जब तक इसे इसके उपयोग से पहले कहीं भी शामिल किया गया हो)।
उद्देश्य-सी में यह वास्तव में शैली का विषय है। मुझे लगता है कि वास्तव में "उचित" तरीका प्रोटोकॉल के लिए एक अलग .h फ़ाइल बनाने के लिए है, और यदि मैं एक प्रोटोकॉल बना रहा था जो किसी और चीज से संबंधित नहीं था (उदाहरण के लिए एनएससीओडीिंग) जो मैं करता हूं। दूसरी तरफ, अधिकांश समय जब मैं प्रोटोकॉल (या एक अनौपचारिक प्रोटोकॉल, NSObject पर एक श्रेणी का उपयोग करके) बनाता हूं, तो यह किसी अन्य वर्ग से जुड़ा हुआ है, जैसे एनएसटीबल व्यू के डेटा स्रोत अनौपचारिक प्रोटोकॉल। इन परिस्थितियों में, मैंने सादगी के लिए उस वर्ग की हेडर फ़ाइल में घोषणा की है।
ऐप्पल के Communicating with Objects को भी देखें, जो प्रतिनिधि, प्रोटोकॉल और चयनकर्ताओं पर चर्चा करता है। हालांकि यह मैक ओएस एक्स के तहत सूचीबद्ध है, हालांकि अधिकांश (यदि नहीं सभी) आईओएस पर भी लागू होते हैं।
- 1. पायथन: नाम त्रुटि: 'स्वयं' परिभाषित नहीं किया गया है
- 2. Enum.values () परिभाषित किया गया है?
- 3. चेतावनी: '...' की डुप्लिकेट प्रोटोकॉल परिभाषा को अनदेखा किया गया है
- 4. सी हेडर फ़ाइल (.h) में स्वयं-रेफरेंसियल structs को परिभाषित करना?
- 5. फ़ंक्शन परिभाषित किया गया है लेकिन सी
- 6. .NET 3.5 DLL अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल
- 7. Emacs: उस फ़ंक्शन को परिभाषित करें जो फ़ाइल को लोड करता है जहां फ़ंक्शन स्वयं परिभाषित किया गया है
- 8. "prefix 'साबुन को परिभाषित नहीं किया गया है" xslt फ़ाइल
- 9. ईजेएस आंशिक परिभाषित नहीं किया गया है '
- 10. sqlconnection को परिभाषित नहीं किया गया है
- 11. रीढ़ की हड्डी दृश्य - परिभाषित नहीं किया गया है
- 12. Magento UploaderJsObject परिभाषित नहीं किया गया है
- 13. क्या मैं = 0, ++ परिभाषित किया गया है?
- 14. आकार (बूल) परिभाषित किया गया है?
- 15. DEBUG मैक्रो परिभाषित किया गया है?
- 16. glGenBuffers परिभाषित नहीं किया गया है?
- 17. प्लॉट परिभाषित नहीं किया गया है
- 18. getActivity() जहां इसे परिभाषित किया गया है?
- 19. ऐस संपादक "परिभाषित परिभाषित नहीं किया गया है"
- 20. कोको में, आईडी प्रकार कैसे परिभाषित किया गया है?
- 21. Google ऐप इंजन पायथन - स्वयं को परिभाषित नहीं किया गया है
- 22. $ अपवाद को "स्थानीय" में परिभाषित किया गया है
- 23. jQuery स्रोत कोड में jQuery.ajax कहां परिभाषित किया गया है?
- 24. उल्का में "टेम्पलेट परिभाषित नहीं किया गया" क्या कारण है?
- 25. एनएसएट्रिब्यूटेड स्ट्रिंग में एक पैराग्राफ कैसे परिभाषित किया गया है?
- 26. नोड __dirname परिभाषित नहीं किया गया
- 27. फ़ाइल प्रोटोकॉल
- 28. साझा किया गया फ़ाइल फ़ाइल
- 29. टीएफएस 2012 में फ़िल्टर कहां परिभाषित किया गया है?
- 30. विभिन्न कंपाइलरों में __cplusplus निर्देश कैसे परिभाषित किया गया है?
मैं कोड समीक्षा पर काम कर रहा था जहां मुझे कक्षाओं की संख्या में एक प्रोटोकॉल दोबारा लिखा गया, मैं प्रोटोकॉल को परिभाषित करने के लिए एक अलग फ़ाइल बना रहा हूं। लेकिन उस फाइल को आयात करने में चूक गई। आपका उत्तर "(जब तक इसे इसके उपयोग से पहले कहीं भी शामिल किया गया हो)।" धन्यवाद + – Alok