Bellek sızıntılarını önlemek için Bileşenler yok olduğunda Gözlemlenebilir (yani: sonsuz değerine sahip Gözlemlenebilir öğeler) aboneliği iptal etmem gerektiğini anlıyorum. sonlu Gözlemcileri otomatik olarak tamamlayacak ve otomatik olarak unsubscribe
yapacaktır.Köşeli 2/Rxjs: Abonelikten çıkmam gerekiyor mu?
Ama oluşturursanız bir benim bileşenindeObservable
(örneğin FormGroup.valueChanges
veya QueryList.changes
için), bu bir onu içeren bileşen ile yok edilecek, bu yüzden hiçbir bellek sızıntısı bile olacak düşünüyorum sonsuz 'un aboneliğini iptal edemem. Ben unsubscribe
this.form.valueChanges
dan do, İşte
@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)
);
}
}
;: Burada
basit bir örnek Bileşenim yok edildiğinde,this.form.valueChanges
da imha edilecek. Bu durumda bir bellek sızıntısı olacak mı?
Abone olmak için (...) tam bir geri arama eklemeye ve bileşen yok olduğunda çağrılıp çağrılmadığını kontrol etmeye çalıştınız mı? –
Ben yaptım ve buna (Ben sadece bu.form.valueChanges' ile test yaptım) denir. – freedonaab
Sanırım abonelikten çıkmak daha iyi ama gerekli değil. Bir bellek sızıntısı beklemezdim, çünkü bileşen ne zaman imha edilirse, çöp toplanır ve bununla birlikte aboneliğiniz olur. Aboneliği aboneliğin dışına abone veya abonelikten geçirirseniz (örneğin, bir servis), bu bileşenin GCed olmasını engelleyebilir, fakat eğer bileşenlerin hepsi bileşen içinde ise zarar görmemelidir. –