ストリームを参照するサブスクライバーとインスタンスの両方がガベージ コレクションの対象である (アクティブなインスタンスによって参照されていない) 場合、接続はカウントされず、両方のインスタンスがガベージ コレクションされるはずです (ただし、これについてはよくわかりません)。
まだ見たことのないパターンです。
すべてのサブスクリプションをキャンセルしたいときは、それらをコレクションに保存して実行します
subscriptions.forEach(s) {
s.cancel();
}
subscriptions.clear();
さまざまな状況で再購読をキャンセルしたい場合は、そのような購読ごとに変数を作成します。
var someSubscr = xxx.listen(...);
...
if(someSubscr != null) someSubscr.cancel();
someScubscr = null;
これは Polymer 要素でのみ使用detached
し、サブスクライブ解除とattached
サブスクライブに使用します。
他の状況で必要な場合は、上記のコードをdispose
メソッドに入れて、インスタンスがもう必要ないことがわかっているときに呼び出します。
インターフェースを作って、メソッドを持つべきクラスに実装するといいと思いますdispose
。
abstract class Disposable {
void dispose();
}
インスタンスを作成するある種のファクトリがあり、インスタンスのdispose
使用が終了したときにインスタンスを呼び出す必要があるかどうかがわからない場合は、この行を追加するだけで安全です。
if(x is Disposable) x.dispose();
VM がデストラクタまたは破棄メソッドを呼び出す機能のリクエストがあります。
しかし、これが実装されるかどうかは不明です。
関連: