我按照我的角组件的清理模式,看起来像这样:我是否需要填写一个主题才能被垃圾收集?
class SomeComponent implements OnInit, OnDestroy {
private destroy$ = new Subject();
ngOnInit() {
service.someStream().takeUntil(this.destroy$).subscribe(doSomething);
}
ngOnDestroy() {
this.destroy$.next(true);
}
}
这有当组件被销毁自动退订的好处。
我的问题是:对destroy$
的引用是否无限期地存在,是因为我没有调用this.destroy$.complete()
,还是会在收集父类时得到GC?
即使你没有直接在主体上调用'complete()',你也可以用'takeUntil'操作符完成链,它会发送'complete'信号并使每个操作符递归地取消订阅。因此,“完全”信号是来自主体还是来自更远的链路,无关紧要。 – martin
@马丁我认为你的回答是不正确的。对我来说,takeUntil将完成您应用takeUntil的流。不是使用takeUntil的人。看看大理石图:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-takeUntil注意,当发射'z'时,最终流将关闭,但是包含'z'的流保持打开状态。所以肖恩,是的,你需要打电话给下一个,也是完整的。 – Maxime
虽然我非常肯定它会在删除父类的引用时得到GC'd。这种模式对我来说似乎很可疑,为什么你不只是在关闭所有流时跟踪订阅并调用'unsubscribe'呢? – paulpdaniels