2010-10-20 13 views
8

मैंने प्रलेखन पढ़ा है लेकिन मैं अभी भी उलझन में हूं। क्या कोई कृपया बता सकता है कि प्रोटोकॉल क्या है? (आप कोड उदाहरण दे सकते हैं लेकिन मैं वास्तव में एक स्पष्टीकरण की तलाश में हूं)प्रोटोकॉल क्या है?

उत्तर

11

Here's a great article on it। प्रभावी रूप से, उद्देश्य-सी में एक प्रोटोकॉल जावा में एक इंटरफ़ेस या सी ++ में शुद्ध वर्चुअल क्लास के समान है (हालांकि शुद्ध वर्चुअल क्लास में डेटा सदस्य नहीं हो सकते हैं ...)। यह मूल रूप से एक गारंटी है कि एक विशिष्ट वर्ग जानता है कि दिए गए तरीकों (संदेशों) के किसी भी सेट का जवाब कैसे दिया जाए।

संपादित करें मूल लेख गायब हो गया है इसलिए मैंने इसे एक अलग ट्यूटोरियल के साथ बदल दिया है।

+3

यह गारंटी है जब तक प्रोटोकॉल वैकल्पिक तरीकों को परिभाषित नहीं करता है। उस स्थिति में आपको अभी भी जांचना होगा कि विधि लागू की गई है या नहीं। –

+0

प्रोटोकॉल में गुण भी हो सकते हैं। –

+0

बस मॉडरेटर को इंगित करना चाहते हैं कि लिंक मर चुका है। – Alix

4

प्रोटोकॉल एक वर्ग लागू होने वाली आवश्यक और/या वैकल्पिक विधियों की एक सूची को परिभाषित करने का माध्यम है। यदि कोई वर्ग प्रोटोकॉल को गोद लेता है, तो इसे प्रोटोकॉल में सभी आवश्यक विधियों को लागू करना होगा। कोको उद्देश्य-सी संदेशों के माध्यम से इंटरप्रोसेस संचार का समर्थन करने के लिए प्रोटोकॉल का उपयोग करता है। इसके अलावा, चूंकि उद्देश्य-सी एकाधिक विरासत का समर्थन नहीं करता है, इसलिए आप प्रोटोकॉल के साथ समान कार्यक्षमता प्राप्त कर सकते हैं, क्योंकि एक वर्ग एक से अधिक प्रोटोकॉल को अपना सकता है।

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

@protocol NSCoding 

    -(void)encodeWithCoder:(NSCoder *)aCoder; 

    -(id)initWithCoder:(NSCoder *)aDecoder; 

    @end 

एक प्रोटोकॉल को अपनाने के लिए,> < में प्रोटोकॉल के नाम पर लगा

नीचे
@interface SomeClass : NSObject <NSCoding> 

    { 
    some variables 
    } 

कैसे एक प्रोटोकॉल को परिभाषित करने की तरह?

हम दोनों प्रोटोकॉल के भीतर एक वैकल्पिक तरीकों की आवश्यकता बना सकते हैं।

@protocol Hello 
    - (BOOL)send:(id)data; 
    - (id)received; 
    @optional 
    - (int)progress; 
    @end 

ऊपर दिए उदाहरण में प्रोटोकॉल का उपयोग करने के लिए, इंटरफ़ेस में प्रोटोकॉल घोषित करने और वर्ग कार्यान्वयन के लिए आवश्यक तरीकों बारे में:

क्या इस प्रकार एक प्रोटोकॉल 'हैलो' नाम की एक definion है

// इंटरफ़ेस @interface AnotherClass: NSObject

{ 
    some declaration 
    } 

// कार्यान्वयन @implementation AnotherClass

- (BOOL)send:(id)data 
    { 
    some declaration 
    } 

    - (id)received 
    { 
    some code 
    } 

// वैकल्पिक विधि

- (int)progress 
    { 
    some code 
    } 
    @end 

मुझे आशा है कि यह आप प्रोटोकॉल जानने के लिए मदद करता है।

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