我知道,爲了防止內存泄漏,組件被銷燬時,我必須取消訂閱某些Observable(即:具有無限值值的Observable)值。我不需要這樣做有限的可觀測物,因爲他們會完成並自動地unsubscribe
。Angular 2/Rxjs:我真的需要退訂嗎?
但如果我創建一個無限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
我想那樣更好但不必取消訂閱。我不會期望內存泄漏,因爲組件被銷燬時,它會被垃圾收集,並且你的訂閱。如果您訂閱或通過組件外部的訂閱(例如服務),那麼這可能會阻止組件被GCed,但是如果組件內的所有內容都不應該受到傷害。 –