जब आप घोषित
id<MyProtocol> var;
ऑब्जेक्टिव-सी संकलक केवल MyProtocol
में तरीकों के बारे में जानता है और इस तरह एक चेतावनी का उत्पादन करेगा अगर आप NSObject
तरीकों में से किसी को फोन करने की कोशिश की तरह एक चर, जैसे -retain/-release
, उस उदाहरण पर। इस प्रकार, कोको NSObject
प्रोटोकॉल को परिभाषित करता है जो NSObject
वर्ग और आवृत्ति विधियों को प्रतिबिंबित करता है। MyProtocol
NSObject
प्रोटोकॉल लागू करने से यह घोषणा करते हुए, आप संकलक को एक संकेत देते हैं कि NSObject
विधियों को एक उदाहरण द्वारा कार्यान्वित किया जाएगा जो MyProtocol
लागू करता है।
यह सब क्यों जरूरी है? उद्देश्य-सी वस्तुओं को किसी भी रूट वर्ग से उतरने की अनुमति देता है। कोको में, एनएसओब्जेक्ट सबसे आम है, लेकिन केवल रूट वर्ग नहीं है। उदाहरण के लिए NSProxy
भी एक मूल वर्ग है। इसलिए id
प्रकार का उदाहरण आवश्यकNSObject
के तरीकों का उत्तराधिकारी है।
स्रोत
2009-03-25 17:45:16
"तकनीकी रूप से आप अभी भी उन संदेशों को वैसे भी भेज सकते हैं" कोई गारंटी नहीं है कि वस्तु उन संदेशों को समझ जाएगी, अगर आपको नहीं पता कि यह NSObject प्रोटोकॉल लागू करता है। – user102008
यह एक अच्छा पर्याप्त जवाब है –