सरल जवाब प्रोटोकॉल होगा।
सरल लेकिन गलत। एक प्रोटोकॉल एक इंटरफेस विनिर्देश है। यह संदेशों का एक संग्रह है कि किसी ऑब्जेक्ट को (@optional
कीवर्ड को अभी अनदेखा करना) का जवाब देना चाहिए।
शब्द "वर्चुअल फ़ंक्शन" का उद्देश्य उद्देश्य-सी में कोई प्रत्यक्ष समकक्ष नहीं है। उद्देश्य-सी में आप वस्तुओं पर फ़ंक्शंस नहीं कहते हैं, आप उन्हें संदेश भेजते हैं। ऑब्जेक्ट स्वयं तब निर्णय लेता है कि संदेश का जवाब कैसे दिया जाए, आम तौर पर इसके वर्ग ऑब्जेक्ट में संदेश देखकर, संबंधित विधि ढूंढकर और इसका आह्वान करना। ध्यान दें कि यह सब रन टाइम पर होता है, समय संकलित नहीं करता है।
संदेशों के बीच मैपिंग (या "चयनकर्ता" उन्हें तकनीकी शब्द देने के लिए) और विधियों को पूरी तरह से @implementation
से बनाया गया है। @interface
में विधि घोषणाएं केवल कंपाइलर को वह जानकारी देने के लिए हैं जो आपको चेतावनी देने के लिए आवश्यक है कि आप एक विधि कार्यान्वयन भूल गए हैं। और यह केवल एक चेतावनी है क्योंकि आप रन टाइम तक नहीं बता सकते हैं कि क्या ऑब्जेक्ट वास्तव में संदेश का जवाब देता है या नहीं। उदाहरण के लिए, कोई और मौजूदा वर्ग में एक श्रेणी जोड़ सकता है जो अनुपलब्ध विधियों के लिए कार्यान्वयन प्रदान करता है, या एक वर्ग forwardingTargetForSelector:
को उन संदेशों को अग्रेषित करने के लिए ओवरराइड कर सकता है जो इसे कहीं और प्रतिक्रिया नहीं देते हैं।
http://stackoverflow.com/questions/5222083/implement-a-pure-virtual-method-in-objective-c –