कोको प्रतिनिधियों का उपयोग नियंत्रण में उलझन को पूरा करने और उप-वर्गीकरण की आवश्यकता को कम करने के लिए किया जाता है। एक ही ऑब्जेक्ट के लिए कई प्रतिनिधि होने के लिए पूरी तरह से संभव है, लेकिन यह तब किया जाता है जब विभिन्न वस्तुओं के विभिन्न प्रकार के निर्णयों को प्रस्तुत करने के लिए यह समझ में आता है। इसका एक शानदार उदाहरण वेबकिट से WebView
है, जिसमें पांच प्रतिनिधि प्रतिनिधि संसाधन लोडिंग और नेविगेशन नीति के रूप में विविध क्षेत्रों के लिए ज़िम्मेदार हैं।
सी # की घटना-प्रतिनिधि प्रणाली, जो किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के साथ पंजीकृत करने की अनुमति देती है, जब कोई विशेष घटना होती है, तो कोको से उपलब्ध कई अधिसूचना एपीआई के सबसे नज़दीक है। विभिन्न एपीआई आप के पार चला सकता है, कर रहे हैं उच्चतम स्तर से सबसे कम करने के लिए:
NSNotificationCenter
NSDistributedNotificationCenter
CFNotificationCenter
- डार्विन सूचनाएं।
सभी भावनाओं में समान हैं, इसलिए मैं केवल इस मामले में उपयोग करने वाले व्यक्ति पर विचार करूंगा: NSNotificationCenter
।
क्लासए और कक्षाबी जैसे पर्यवेक्षक, NSNotificationCenter
के साथ अधिसूचनाओं में अपनी रुचि पंजीकृत करते हैं। वे एक खास नाम वाली
- अधिसूचना में रुचि एक विशिष्ट वस्तु से एक खास नाम वाली
- सूचनाएं किसी भी वस्तु से
- सूचनाएं एक विशेष वस्तु से निर्दिष्ट कर सकते हैं।
जब अधिसूचना केंद्र पर एक मेलिंग अधिसूचना पोस्ट की जाती है, तो पर्यवेक्षकों को अधिसूचना केंद्र के साथ पंजीकरण समय पर प्रदान की गई विधि का आह्वान करके अधिसूचित किया जाता है। विधि में हमेशा एक ही प्रकार होता है: यह कुछ भी नहीं देता है और एक एकल तर्क स्वीकार करता है, NSNotification
ऑब्जेक्ट।इस तरह के ClassA और ClassB, के रूप में
आप आम तौर पर ClassC अपने हेडर फाइल में अधिसूचना नाम के लिए एक निरंतर घोषित, उदाहरण के लिए होने से अपनी स्थिति को संभाल होगा,
extern NSString *const ClassCSomethingDidHappenNotification;
इच्छुक पर्यवेक्षकों, तो इस में रुचि रजिस्टर कर सकते हैं अधिसूचना:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleSomethingDidHappen:)
name:ClassCSomethingDidHappenNotification
object:aClassCObject];
इसके बजाय एक चयनकर्ता दर्ज की और कॉलबैक को संभालने के लिए पर्यवेक्षक के लिए एक विधि को जोड़ने की, आप भी अब एक ऑपरेशन कतार और उस कतार पर अमल करने के लिए जब एक मिलान सूचना पोस्ट किए एक ब्लॉक रजिस्टर कर सकते हैं।
जब अधिसूचना के साथ जुड़े घटना होती है, ClassC पदों अधिसूचना केंद्र के लिए अधिसूचना:
[[NSNotificationCenter defaultCenter]
postNotificationName:ClassCSomethingDidHappenNotification
object:self];
अधिसूचना केंद्र तो पर्यवेक्षकों की सूची के माध्यम दिखेगा, जो इस अधिसूचना से मेल खाते हैं, और आह्वान उचित विधि वे नहीं के रूप में प्रतिनिधियों कर सकते हैं, वापस जानकारी भेज सकते हैं -
अधिसूचनाओं और प्रतिनिधियों से उनकी समानताओं और मतभेदों के लिए उत्कृष्ट परिचय। –
सहमत, इस प्रतिनिधियों और सूचनाएं (श्रोताओं) का एक बहुत अच्छा बहुविकल्पी है। यह कुछ हद तक एक अस्पष्ट रेखा है (उदाहरण के लिए, हम प्रायः असीमित कार्यों को पूरा करने के बारे में प्रतिनिधियों को सूचित करते हैं) लेकिन यह भेद को समझने का भुगतान करता है। –