我有一个Angular表单数组。在应用程序的其他地方,一些订阅是在formcontrol验证更改上设置的。在生命周期的某个时刻,我删除了一个表单组。我是否需要担心订阅仍然在内存中不存在的对象上打开?
答案 0 :(得分:1)
NO
如果你在代码中的任何地方调用.subscribe,那么不泄漏内存的唯一方法就是确保这些订阅再次取消订阅。
您需要手动取消订阅每一个或确保您订阅的观察者都是有限的 - 这意味着他们有一个"结束"某处发出信号。它们可以是有限的序列(.first(),. take()等),也可以通过以.takeWhile()或.takeUntil()
结尾来切换它们。如果您留下范围,删除引用的对象甚至导航,订阅都不关心。你需要确保他们取消订阅。
请在此处查看我的回答: RXJS - Angular - unsubscribe from Subjects
答案 1 :(得分:0)
我是否需要担心订阅仍然在内存中不存在的对象上打开?
只要订阅/ observable处于打开状态并且正在运行,即使您的父元素不再可用,该变量仍将在内存中。从而导致记忆泄漏。
黄金法则:您应该始终取消订阅可观察量。
此规则存在某些异常/边缘情况,例如Http Requests在完成后自动取消订阅,因此理论上不需要取消订阅。
编辑:我发现了一篇文章,更深入地解释了它Angular/RxJs When should I unsubscribe from `Subscription`