सामान्य तौर पर, हाँ, कमजोर संदर्भों का उपयोग किया जाना चाहिए। लेकिन पहले हमें इस बारे में स्पष्ट होना चाहिए कि "ईवेंट श्रोताओं" से आपका क्या मतलब है।
कॉलबैक
कुछ प्रोग्रामिंग शैलियों में, विशेष रूप से अतुल्यकालिक संचालन के संदर्भ में, एक कॉलबैक के रूप में गणना के एक हिस्से का प्रतिनिधित्व करना आम है जो एक निश्चित घटना पर निष्पादित होता है। उदाहरण के लिए Promise
[ 1 ] में एक then
विधि हो सकती है जो पिछले चरण के पूरा होने पर कॉलबैक पंजीकृत करती है:
promise =
Promise.new(async_task) # - kick off a task
.then(value => operation_on(value)) # - queue other operations
.then(value => other_operation(value)) # that get executed on completion
... # do other stuff in the meanwhile
# later:
result = promise.value # block for the result
यहाँ, पंजीकृत कॉलबैक then
को मजबूत संदर्भों द्वारा आयोजित किया जाना है , क्योंकि कॉलबैक के संदर्भ में वादा (घटना स्रोत) एकमात्र वस्तु है। यह एक मुद्दा नहीं है क्योंकि वादे का जीवनकाल सीमित होता है, और वादों की श्रृंखला पूरी होने के बाद कचरा एकत्र किया जाएगा।
ऑब्जर्वर पैटर्न
प्रेक्षक पैटर्न में, एक विषय में आश्रित पर्यवेक्षकों की एक सूची है। जब विषय कुछ स्थिति में प्रवेश करता है, तो पर्यवेक्षकों को कुछ इंटरफ़ेस के अनुसार सूचित किया जाता है। पर्यवेक्षकों को विषय से जोड़ा और हटाया जा सकता है। ये पर्यवेक्षक एक अर्थिक निर्वात में मौजूद नहीं हैं, लेकिन किसी उद्देश्य के लिए घटनाओं की प्रतीक्षा कर रहे हैं।
यदि यह उद्देश्य अब मौजूद नहीं है, तो पर्यवेक्षकों को विषय से हटा दिया जाना चाहिए। यहां तक कि कचरा एकत्र करने वाली भाषाओं में, इस निष्कासन को मैन्युअल रूप से करना पड़ सकता है। यदि हम एक पर्यवेक्षक को हटाने में विफल रहते हैं, तो यह विषय से पर्यवेक्षक के संदर्भ के माध्यम से जीवित रखा जाएगा, और इसके साथ सभी ऑब्जेक्ट्स जो पर्यवेक्षक संदर्भ देते हैं। यह स्मृति को बेकार करता है और (अब बेकार) पर्यवेक्षक के रूप में प्रदर्शन को नीचा दिखाता है।
कमजोर संदर्भ इस मेमोरी लीक को ठीक करते हैं, क्योंकि वे पर्यवेक्षक को कचरा एकत्र करने की अनुमति देते हैं। जब विषय सभी पर्यवेक्षकों को सूचित करने के लिए चारों ओर जाता है और पाता है कि पर्यवेक्षक के कमजोर संदर्भों में से एक खाली है, तो उस संदर्भ को सुरक्षित रूप से हटाया जा सकता है। वैकल्पिक रूप से कमजोर संदर्भों को इस तरह से लागू किया जा सकता है जो विषय को क्लीनअप कॉलबैक दर्ज करने की अनुमति देता है जो संग्रह पर पर्यवेक्षक को हटा देगा।
लेकिन ध्यान दें कि कमजोर संदर्भ केवल एक बैंड-सहायता है जो पर्यवेक्षक को हटाने के लिए भूलकर क्षति को सीमित करता है। सही समाधान यह सुनिश्चित करने के लिए होगा कि एक पर्यवेक्षक को हटा दिया जाए जब कोई ज़रूरत न हो। विकल्पों में शामिल हैं:
इसे मैन्युअल रूप से करना, लेकिन यह त्रुटियों से ग्रस्त है।
जावा या using
C # में संसाधन के साथ प्रयास करने के लिए कुछ का उपयोग करना ।
नियतात्मक विनाश, जैसे कि RAII मुहावरे के माध्यम से। ध्यान दें कि निर्धारक कचरा संग्रह के साथ एक भाषा में, विनाशकारी को ट्रिगर करने के लिए इस विषय से पर्यवेक्षक तक कमजोर संदर्भों की आवश्यकता हो सकती है।