मैं समझता हूं कि मुझे अवशोषित प्रमाणपत्रों को अवश्य लिखना चाहिए (यानी: वे पर्यवेक्षकों जिनमें अनंत मान है) जब स्मृति रिसाव को रोकने के लिए घटक नष्ट हो जाते हैं। मुझे परिमित पर्यवेक्षकों के लिए ऐसा करने की आवश्यकता नहीं है क्योंकि वे पूर्ण हो जाएंगे और स्वचालित रूप से unsubscribe
होंगे।कोणीय 2/आरएक्सजे: क्या मुझे वास्तव में सदस्यता समाप्त करने की आवश्यकता है?
लेकिन अगर मैं बनाने के एक अनंतObservable
मेरी घटक में (उदाहरण के FormGroup.valueChanges
, या QueryList.changes
के लिए), यह एक घटक है कि यह शामिल है के साथ नष्ट हो जाएगा, तो मैं है कि वे कोई स्मृति रिसाव भी हो जाएगा लगता है अगर मैं से सदस्यता रद्द नहीं करता हूं।
यहाँ एक सरल उदाहरण है:
@Component({})
export class DummyComponent {
form: FormGroup;
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
firstName: [''],
lastName: ['']
});
this.form.valueChanges.subscribe(
x => console.log(x)
);
}
}
यहाँ, मैं नहीं unsubscribe
this.form.valueChanges
से करते हैं; जब मेरा घटक नष्ट हो जाता है, तो this.form.valueChanges
भी नष्ट हो जाएगा।
क्या इस मामले में स्मृति रिसाव होगी?
क्या आपने सब्सक्राइब करने के लिए एक पूर्ण कॉलबैक जोड़ने की कोशिश की है (...) और जांच की जाती है कि घटक नष्ट होने पर इसे कॉल किया जाता है या नहीं? –
मैंने किया, और इसे नहीं कहा जाता है (मैंने केवल 'this.form.valueChanges' के साथ परीक्षण किया था)। – freedonaab
मुझे लगता है कि यह बेहतर है लेकिन सदस्यता समाप्त करने के लिए आवश्यक नहीं है। मैं स्मृति रिसाव की अपेक्षा नहीं करता क्योंकि जब घटक नष्ट हो जाता है, तो उसे कचरा इकट्ठा किया जाएगा, और इसके साथ आपकी सदस्यता होगी। यदि आप घटक के बाहर सदस्यता सदस्यता लेते हैं या पास करते हैं (उदाहरण के लिए एक सेवा) तो यह घटक को जीसीडी होने से रोक सकता है, लेकिन यदि सभी घटक के भीतर हैं तो इसे चोट नहीं पहुंची जानी चाहिए। –