【发布时间】:2017-07-30 09:02:48
【问题描述】:
我明白,当组件被销毁时,我必须取消订阅某些 Observable(即:具有 infinite 值的 Observable),以防止内存泄漏。我不需要为 finite Observables 这样做,因为它们会自动完成并自动 unsubscribe。
但是如果我在我的组件中创建一个infinite 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)
);
}
}
这里,我不是来自this.form.valueChanges的unsubscribe;当我的组件被销毁时,this.form.valueChanges 也会被销毁。
这种情况会不会出现内存泄漏?
【问题讨论】:
-
你有没有尝试给 subscribe(...) 添加一个完整的回调,并检查它是否在组件被销毁时被调用?
-
我做了,它没有被调用(我只用
this.form.valueChanges做了测试)。 -
我想这样会更好,但没有必要取消订阅。我不希望出现内存泄漏,因为当组件被销毁时,它会被垃圾收集,并且你的订阅也会随之而来。如果您在组件之外订阅或传递订阅(例如服务),那么这可能会阻止组件被 GC,但如果所有组件都在组件内,它应该不会受到伤害。
标签: angular memory-leaks rxjs