角度留档说
ngOnDestroy():在Angular销毁指令/组件之前进行清理。取消订阅可观察对象并分离事件处理程序以避免内存泄漏。就在Angular销毁指令/组件之前调用。
有开发者在说,组件属性(类变量)也应该设置为空,避免内存泄漏。这是真的吗?
export class TestComponent implements OnInit, OnDestroy {
public name: string;
constructor() { }
ngOnInit() {
this.name = 'John';
}
ngOnDestroy() {
// is this code really necessary.
this.name = null;
}
}
不,你不需要那个。组件只是一个类,当它被显示时,一个实例被创建。当组件被销毁时,相关的对象没有被引用,它将尽快被垃圾回收。
正如留档所说,您只需要在可观察对象和事件处理程序的情况下使用,因为如果它们处于活动状态,垃圾收集器不会删除它们。
取消订阅可观察对象并分离事件处理程序以避免内存泄漏
是的,你需要这样做。当我将数据存储在变量中并在不同子组件之间切换时调用ngOnDestroy
时,我遇到了同样的问题。
该组件希望它会被自动删除,但它没有,数据没有从该变量中删除,因此在ngOnDestroy
中将其设置为null对我有帮助。
ngOnDestroy(){ this.home=null;}