मैं सोच रहा हूं कि केवीओ बनाम एनएसएनोटिफिकेशन सेंटर अवलोकन में एक दूसरे के उपयोग का कोई कारण है या नहीं। प्रदर्शन, स्मृति उपयोग, गति, आदि?केवीओ अवलोकन बनाम NSNotificationCenter अवलोकन
उत्तर
दोनों हमेशा एक दूसरे के बीच विनिमय नहीं होते हैं। संकल्पनात्मक रूप से, केवीओ केवल एक वस्तु के संपत्ति को देखने के लिए है। उदाहरण के लिए, आप NSApplicationWillTerminateNotification
को प्रतिस्थापित करने के लिए केवीओ का उपयोग नहीं कर सकते हैं क्योंकि यह ऑब्जेक्ट की किसी संपत्ति में परिवर्तन नहीं होने पर किसी घटना के बारे में पर्यवेक्षकों को सूचित करता है।
प्रदर्शन और स्मृति उपयोग के लिए, वे दोनों तेज़ और नगण्य स्मृति का उपयोग करते हैं। NSNotificationQueue
अधिसूचनाओं के बाढ़ को रोकने के लिए coalescing है। जहां तक मुझे पता है, केवीओ के पास कोई सहकारी नहीं है, जिसने मेरे लिए प्रदर्शन बिंदुओं को एक बिंदु पर बनाया है। मैं सैकड़ों ऑब्जेक्ट देख रहा था, और जब उन वस्तुओं के लिए बैच अपडेट हुआ तो मुझे सैकड़ों केवीओ कॉलबैक मिलेंगे। यह केवीओ के साथ ही एक प्रदर्शन मुद्दा नहीं था, लेकिन बैच अपडेट के परिणामस्वरूप मेरे अपने कोड के साथ चल रहा था।
प्रदर्शन वास्तव में समस्या नहीं है, यह समस्या के लिए सबसे अच्छा फिट है। यदि यह एक संपत्ति परिवर्तन है, तो केवीओ का उपयोग करें। यदि यह कोई संपत्ति परिवर्तन नहीं है, तो इस पर निर्भर करता है कि आपको एक पर्यवेक्षक या एकाधिक पर्यवेक्षकों की आवश्यकता है या नहीं।
एक बहुत पुराना सवाल है, लेकिन कुछ बिंदु जोड़ने का विचार किया। मैं Tom Dalling's answer से सहमत हूं, हालांकि, बड़े अनुप्रयोगों में कई परिदृश्य हैं जहां हम ऑब्जेक्ट की संपत्ति के लिए पर्यवेक्षक जोड़ते हैं और हम नहीं कर सकते हैं, या हम पर्यवेक्षकों की सूची से उन्हें हटाने में चूक जाते हैं।
हमें अपने आवेदन से इस परिदृश्य पर विचार करें - एक ViewController एक साँप वस्तु को प्रदर्शित करता है, मैं इस वस्तु पर एक संपत्ति बदलाव के लिए देख रहा हूँ - "जहर"। तो जब भी एक अलग सांप दिखाने के लिए नियंत्रक को देखने की आवश्यकता होती है तो मैं उस सांप ऑब्जेक्ट के पर्यवेक्षक से दृश्य नियंत्रक को हटा दूंगा।
ऐप एक सांप के बजाय सांपों की एक सूची दिखाने के लिए विकसित हुआ, इसका मतलब है कि मुझे उस वस्तु में सभी सांपों की संपत्ति का निरीक्षण करना पड़ा। अब, जब सरणी से एक पुराना सांप हटा दिया जाता है तो मुझे इस घटना के बारे में पता होना चाहिए ताकि मैं व्यू कंट्रोलर को इस सांप ऑब्जेक्ट से पर्यवेक्षक के रूप में हटा सकूं। ऐसा करने के लिए, मुझे पहले सरणी पर बदलावों का पालन करना होगा। ऐसा करने के लिए मुझे सरणी में ऑब्जेक्ट्स डालने और सरणी से निकालने के लिए विशेष प्रोटोकॉल का पालन करना होगा। इस तरह जटिलता पर निर्माण होता है। हम सभी को ऑब्जेक्ट से पर्यवेक्षक को हटाने का नतीजा पता है और यदि वह ऑब्जेक्ट ओएस द्वारा जारी किया जाता है!
ऊपर उद्धृत करने के लिए केवल एक उदाहरण है, मुख्य समस्या यहाँ है मैं उन्हें पर्यवेक्षकों से दूर करने के लिए किसी दिए गए ऑब्जेक्ट के लिए KVO पर्यवेक्षकों की सूची प्राप्त नहीं कर सकता से पहले इस वस्तु जारी किया जाता है - यह आसानी से NSNotification और प्राप्त किया जा सकता NSNotificationCenter। समय में, मैं KVO से अधिक NSNotification का उपयोग कर की ओर झुका हो जाते हैं, फिर भी, KVO हमेशा अच्छा डिजाइन अभ्यास के संदर्भ में अधिसूचना से अधिक बढ़त है।
- 1. केवीओ बनाम NSNotificationCenter
- 2. अवलोकन योग्य अवलोकन
- 3. अवलोकन योग्य
- 4. अवलोकन रीफ्रेश करें जब आइटम अवलोकन योग्य नहीं हैं
- 5. अवलोकन योग्य चयन डेटाबेस प्रदर्शन
- 6. अवलोकन नेटवर्क IO पार्सिंग
- 7. नए अवलोकन योग्य
- 8. अवलोकन संग्रह आइटम
- 9. अवलोकन/पर्यवेक्षक एंड्रॉइड
- 10. अवलोकन एक UITableView
- 11. विभिन्न स्कैला अभिनेता कार्यान्वयन अवलोकन
- 12. एक अवलोकन संग्रह से हटाना
- 13. अवलोकन योग्य से हटाएंअरे- knockoutjs
- 14. विस्तारित नॉकआउट अवलोकन योग्य सरणी
- 15. XML एक अवलोकन योग्य चयन
- 16. एक अवलोकन संग्रह फ़िल्टर करें
- 17. टैब ईवेंट में JQuery अवलोकन
- 18. क्या कोई अमरूद अवलोकन है?
- 19. Grails परियोजना संरचना का अवलोकन
- 20. नॉकआउट अवलोकन योग्य ऐरे प्रदर्शन
- 21. अवलोकन योग्य चयन (टी) बनाम बाध्यकारी सूची (टी)?
- 22. अवलोकन योग्य चयन <> बनाम सूची <>
- 23. नॉकआउट: गणना किए गए अवलोकन योग्य बनाम फ़ंक्शन
- 24. NSManagedObject और केवीओ बनाम प्रलेखन
- 25. एनवीएनोटिफिकेशन बनाम केवीओ
- 26. नॉकआउटजेएस अवलोकन योग्य जब आंतरिक अवलोकन योग्य बदलता है अद्यतन करने के लिए
- 27. क्या मेरे व्यू मॉडेल में अवलोकन का दृश्य अवलोकन या दृश्य मॉडल होना चाहिए?
- 28. कास्ट LINQ परिणाम अवलोकन करने योग्य चयन
- 29. देखा गया अवलोकन हमेशा खाली रहता है
- 30. क्या knockoutJS समर्थन संरक्षित अवलोकन सरणी है?
आह। अधिसूचनाओं के एकत्रीकरण के बारे में नहीं पता था। यह मेरे लिए एक काफी महत्वपूर्ण बात है। – David
नोटिफिकेशन का सबसे अच्छा उपयोग किया जाता है जहां किसी ऑब्जेक्ट को किसी विशिष्ट अन्य ऑब्जेक्ट के बारे में जानने की आवश्यकता नहीं होती है। उदाहरण के लिए, आप विचारों का एक गुच्छा ताज़ा करने के लिए करता है, तो अपने अनुप्रयोग में और सूचनाओं के साथ कुछ सेटिंग में बदलाव होने वाले दृश्यों के उद्देश्य यह है कि सेटिंग का प्रबंधन करता है, जो MVC को बरकरार रखता है के किसी भी ज्ञान है की जरूरत नहीं है चाहते हो सकता है। –