如何解决Angular是否清除ngOnDestroy上的属性或数组以防止内存泄漏?
我有以下代码:(角度9)
employee.component.ts
name:string;
arr = [];
ngOnInit() {
this.name = "abc";
for (let i = 0; i < 1000; i++) {
this.arr.push(i);
}
}
现在,当我使用角度布线移动到另一个组件时, 名为employee的组件将被销毁。
那么我是否需要像下面那样清除ngOnDestroy()方法上的array和name属性,以防止内存泄漏?
ngOnDestroy() {
this.name = "";
this.arr = [];
}
或者angular将清除ngOnDestroy上的数组和属性?
解决方法
您不需要,因为这些变量将被垃圾回收https://angular.io/guide/lifecycle-hooks#ondestroy
,您不需要,垃圾收集器会注意。只要确保您的组件没有订阅任何可观察的对象,等等。如果订阅/组件仍然对根有一些引用,则不会对其进行垃圾收集。
要处理订阅,您应该使用ngOnDestroy
取消订阅所有订阅。以下是一个示例:
@Component({...})
export class AppComponent implements OnInit,OnDestroy {
subscriptions: Subscription[] = [];
ngOnInit () {
var observable = Rx.Observable.interval(1000);
var observable2 = Rx.Observable.interval(1000);
this.subscriptions.push(observable.subscribe(x => console.log(x)));
this.subscriptions.push(observable2.subscribe(x => console.log(x)));
}
ngOnDestroy() {
this.subscriptions.forEach((subscription) => subscription.unsubscribe())
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。