2010-06-21 7 views
38

उद्देश्य-सी में औपचारिक और अनौपचारिक प्रोटोकॉल के बीच क्या अंतर है?उद्देश्य-सी में औपचारिक और अनौपचारिक प्रोटोकॉल के बीच क्या अंतर है?

+0

[इस पोस्ट] (http में वर्णित अनौपचारिक प्रोटोकॉल के बारे में: // stackoverflow .com/प्रश्न/2010058/अनौपचारिक-प्रोटोकॉल-इन-ऑब्जेक्ट-सी) – byJeevan

उत्तर

56

Official Documentation

से औपचारिक और अनौपचारिक प्रोटोकॉल

वहाँ प्रोटोकॉल के दो किस्मों, कर रहे हैं औपचारिक और अनौपचारिक:

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

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

औपचारिक प्रोटोकॉल ऑब्जेक्टिव-सी भाषा के लिए एक विस्तार कर रहे हैं।

+1

तो "अनौपचारिक प्रोटोकॉल" श्रेणी के लिए सिर्फ एक और नाम है? – Stas

+6

Google की तुलना में सेब के दस्तावेज भयानक हैं। –

+3

@ जॉन डी वे बहुत सहमत हैं, सेब दस्तावेज़ हत्यारे हैं। –

2

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

11

अनौपचारिक प्रोटोकॉल: Category (क्रियान्वयन वैकल्पिक हैं)

औपचारिक प्रोटोकॉल: Extension (क्रियान्वयन वैकल्पिक कर रहे हैं और आवश्यक)

+0

क्या श्रेणी विधियां कार्यान्वयन वैकल्पिक हैं? मुझे ऐसा नहीं लगता, क्योंकि मैंने एक विधि कार्यान्वयन पर टिप्पणी की और तुरंत मैं त्रुटि देख सकता हूं "xxxmethod 'के लिए विधि परिभाषा गुम है"। Xxxmethod को .h फ़ाइल में घोषित किया गया है। – selva

+1

अंतर का वर्णन करने का सबसे आसान तरीका। – Warewolf

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