उनमें से प्रत्येक के पेशेवर और विपक्ष क्या हैं?
मुझे उन्हें विशेष रूप से कहां उपयोग करना चाहिए?NSNotificationCenter बनाम प्रतिनिधिमंडल (प्रोटोकॉल का उपयोग कर)?
उत्तर
अंगूठे का नियम यह है कि कितने ग्राहक किसी ईवेंट की अधिसूचित होना चाहते हैं। यदि यह मुख्य रूप से एक वस्तु है (उदाहरण के लिए किसी दृश्य को खारिज करने या बटन पर क्लिक करने के लिए, या असफल डाउनलोड पर प्रतिक्रिया करने के लिए) तो आपको प्रतिनिधि मॉडल का उपयोग करना चाहिए।
यदि आपके द्वारा छोड़ा जाने वाला ईवेंट कई ऑब्जेक्ट्स में रुचि के हो सकता है (उदा। स्क्रीन घुमावदार, स्मृति उपयोग, उपयोगकर्ता लॉगिन/लॉगआउट), तो आपको NSNotificationCenter
का उपयोग करना चाहिए।
उनके उद्देश्यों के अलग हैं:
सूचना संदेश भेजने वाले से करने के लिए संभवतः कई प्राप्तकर्ताओं अज्ञात प्रसारित करने के लिए प्रयोग किया जाता है।
प्रतिनिधिमंडल को प्रेषक की ओर से कार्यरत एक ज्ञात प्राप्तकर्ता को संदेश भेजने के लिए उपयोग किया जाता है।
प्रदर्शन को ध्यान में रखते हुए एक अच्छा विचार है (अधिसूचना की छोटी संख्या के लिए प्रतिनिधिमंडल बेहतर है, अधिसूचना केंद्र बड़ी संख्या में वस्तुओं के लिए बेहतर है, या यह है? एक प्रोफाइलर चलाएं) लेकिन मुझे लगता है कि आप एक और महत्वपूर्ण कारक हैं जिसके बारे में आप बात कर रहे हैं उद्देश्य-सी और आपके कोड बेस के वास्तव में उच्च प्रदर्शन भागों के बारे में बात करने की संभावना कम है, जो सी में लिखे जाने की संभावना है, मॉड्यूल के बीच संकलन-समय निर्भरता को कम कर रहा है।
एक प्रतिनिधि के बजाय प्रतिनिधियों की एक श्रृंखला रखने से रोकने के लिए कुछ भी नहीं है।
मैं केवल किसी भी नेटवर्क स्टैक घटकों और किसी भी कस्टम डिवाइस स्थिति निगरानी इंटरफेस की स्थिति के लिए NSNotificationCenter का उपयोग कर सकता हूं। लेकिन अधिकांश युग्मन के लिए, ऐप की वैश्विक स्थिति के साथ नहीं, मुझे लगता है कि ज्यादातर मामलों में उद्देश्य-सी में सामान्य इंटरफ़ेस अनुबंधों का उपयोग करना और एनएसएनोटिफिकेशन सेंटर का उपयोग करने के बजाय आपके आने वाले लोगों के लिए फॉलो करना आसान है। वास्तव में मैंने कभी भी अपने स्वयं के कस्टम कार्यक्रमों के लिए अधिसूचना केंद्र का उपयोग नहीं किया है और मेरे कोड को पढ़ने वाले किसी और द्वारा कोड समझ की आसानी के लिए प्रतिनिधियों का उपयोग करना पसंद करते हैं।
और आखिरकार, मानक API से अधिसूचनाओं के साथ आपके पास विकल्प नहीं है और किसी भी घटना के लिए ऐप्पल को दो तरीकों से उपयोग करने के लिए उपयोग करना चाहिए।
नोटिफिकेशन आमतौर पर अन्य धागे पर होने वाले परिवर्तनों के यूआई को सूचित करने के लिए बेहतर होते हैं। ऐप्पल के दस्तावेज दृढ़ता और प्रदर्शन कारणों के लिए, जहां संभव हो वहां थ्रेडों के प्रतिनिधियों के उपयोग को दृढ़ता से हतोत्साहित करते हैं। मैक पर, वे बाइंडिंग का उपयोग करने का सुझाव देते हैं, लेकिन चूंकि वे आईफोन पर मौजूद नहीं हैं, इसलिए नोटिफिकेशन शायद आपकी अगली सर्वश्रेष्ठ शर्त है।
उन दोनों के बीच एक विकल्प पर्यवेक्षक पैटर्न का उपयोग कर रहा है, NSNotificationCenter
के बिना। मेरे उद्देश्य-सी कार्यान्वयन को देखें here।
नोटिफिकेशन UI घटकों को डीकॉप्लिंग करने के लिए बेहतर हैं। यह आपको अपने नियंत्रकों या मॉडलों में किसी भी संशोधन के बिना किसी भी दृश्य को प्लग करने की अनुमति देता है। कमजोर-युग्मित डिजाइन के लिए निश्चित रूप से बेहतर है।
लेकिन प्रतिनिधिमंडल और अधिसूचना के बीच प्रदर्शन के लिए, आपको कॉल की आवृत्ति के बारे में सोचना होगा।
प्रतिनिधि अक्सर अधिक घटनाओं के लिए बेहतर हो सकता है, सूचनाएं कम लगातार घटनाओं के लिए बेहतर होती हैं लेकिन अधिक प्राप्तकर्ता। यह प्रोजेक्ट पर निर्भर है कि क्या चुनना है।
- 1. केवीओ बनाम NSNotificationCenter
- 2. संरचना बनाम प्रतिनिधिमंडल
- 3. केवीओ अवलोकन बनाम NSNotificationCenter अवलोकन
- 4. बजाय // का उपयोग कर प्रोटोकॉल का: //
- 5. NSNotificationcenter
- 6. NSNotificationCenter
- 7. NSNotificationCenter
- 8. एसपीएनईजीओ/केर्बेरोज और प्रतिनिधिमंडल का उपयोग कर टोमकैट प्रमाणीकरण
- 9. एनएसएनोटिफिकेशन बनाम प्रतिनिधि प्रोटोकॉल?
- 10. द्विआधारी बनाम पाठ प्रोटोकॉल
- 11. उद्देश्य सी: ब्लॉक बनाम चयनकर्ता बनाम प्रोटोकॉल
- 12. NSNotificationCenter चयनकर्ता
- 13. प्रोटोकॉल शब्दावली: संदेश बनाम पैकेट
- 14. NSNotificationCenter के साथ parametrized विधि का उपयोग कैसे करें?
- 15. HTTP पर कस्टम यूआरएल प्रोटोकॉल (NSURLProtocol का उपयोग कर?)
- 16. विरासत के बजाय प्रतिनिधिमंडल का उपयोग कब करें?
- 17. घटना प्रतिनिधिमंडल बनाम प्रत्यक्ष बंधन जब एक पृष्ठ
- 18. NSNotificationCenter और सुरक्षित multithreading
- 19. निकालें NSNotificationCenter पर्यवेक्षक
- 20. वेबस्पेयर क्लासलोडर प्रतिनिधिमंडल मोड
- 21. NSNotificationCenter ऑब्जर्वर अधिसूचना
- 22. प्रोटोकॉल बफर का उपयोग कैसे करें?
- 23. प्रोटोकॉल श्रेणी
- 24. प्रोटोकॉल-कम-यूआरएल "//site.org" बनाम "http://www.site.org"
- 25. उद्देश्य सी प्रोटोकॉल उपयोग
- 26. क्या मैं एक मानक Google खाते के साथ ओपनआईडी प्रतिनिधिमंडल का उपयोग कर सकता हूं?
- 27. बढ़ावा देने serialization बनाम गूगल प्रोटोकॉल बफर?
- 28. जेएसओएन या बीएसओएन बनाम प्रोटोकॉल बफर
- 29. गूगल प्रोटोकॉल बफ़र्स json बनाम एक्सएमएल
- 30. बनाम लैम्ब्डा का उपयोग
मैं यह भी जोड़ूंगा कि अधिसूचनाएं एक तरफा हैं (उदा।, 'DidFireMissle'), जबकि यदि आपको जानकारी वापस करने की आवश्यकता है तो एक प्रतिनिधि की आवश्यकता होती है (उदा।,' - (BOOL) mustFireMissle')। – benzado
@ बेंजाडो: असल में, आप किसी ऑब्जेक्ट को एक संदेश के साथ पास कर सकते हैं, जो रिसीवर बदल सकता है। आपको यह ध्यान रखना होगा कि एकाधिक (या शून्य) रिसीवर अधिसूचना को संभाल सकते हैं, लेकिन यह मान्य है। –