私は、メモリリークを防ぐためにObservable(つまりObservableがの値が無限の値)を購読解除する必要があることを理解します。私はそれを行う必要はありません有限 Observablesが完了すると自動的にunsubscribe
。角度2/Rxjs:本当に購読を解除する必要がありますか?
しかし、私は私のコンポーネントで無限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
も破壊されます。
この場合、メモリリークが発生しますか?
サブスクリプション(...)に完全なコールバックを追加しようとしましたが、コンポーネントが破棄されたときに呼び出されるかどうかを確認しましたか? –
私はしていて、呼び出されていません(私は 'this.form.valueChanges'でテストしました)。 – freedonaab
退会するのが良いと思いますが、必要はありません。コンポーネントが破棄されたときにガベージコレクションが行われ、そのサブスクリプションでサブスクリプションが取得されるため、メモリリークが予想されません。サブスクリプションをコンポーネント(サービスなど)の外で購読したり渡したりすると、コンポーネントがGCedされるのを防ぐことができますが、すべてがコンポーネント内にあれば傷ついてはいけません。 –