Если подписчик и экземпляр, ссылающийся на поток, подлежат сборке мусора (на который не ссылается какой-либо активный экземпляр), соединение не должно учитываться, и оба экземпляра должны быть удалены сборщиком мусора (но я не уверен в этом).
Я еще не видел шаблона.
Когда я просто хочу отменить все подписки, я сохраняю их в коллекции и запускаю
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();
Есть запрос функции, чтобы заставить виртуальную машину вызывать деструктор или метод удаления.
но неясно, будет ли это реализовано.
Также связаны:
person
Günter Zöchbauer
schedule
30.09.2014