vitali1995
@vitali1995

Нужно ли с EventEmitter заботиться об освобождении памяти?

Пример. Есть 2 эмиттера, один содержит другой. Нужно подписать верхний на нижний, чтобы события нижнего передавались в верхний.

class Up extends EventEmitter {
  down = new EventEmitter();
  constructor() {
    down.on('event', () => this.emit);
  }
}


В Angular 2 при использовании subscribe нужно в деструкторе отписываться вызовом unsubscribe.
Есть ли подобная необходимость с EventEmitter? Что будет, если свойству down присваивается новое значение? Что если объект класса Up перезаписывается?

Сразу хочу уточнить, как быть с ограничителями на количество подписываемых событий. Практикуется ли снятие ограничений или такая необходимость означает ошибочную архитектуру?

В общем, нужно устаканить этот момент в голове, чтобы в последствии не оказаться перед непонятными утечками памяти. Спасибо за понимание)
  • Вопрос задан
  • 317 просмотров
Решения вопроса 1
VladimirZhid
@VladimirZhid
Нравится делать что-то интересное и полезное.
Может быть я не до конца компетентен в этом вопросе и сам ошибаюсь, но утечки не видно
Утечка памяти может происходить если "долгоживущий" объект ссылается на "короткоживущий"
когда ты пишешь:
down.on('event', () => this.emit);

у down в массиве events добавляется ссылка на метод emit в экземпляре класса Up, если не будет экземпляра класса Up то и не будет ссылок на него из down. Проблема может быть если экземпляр класса Up тоже подпишется на события в down
Если что, то сорри за сумбурность.
Если кто-то прочитает и увидит в этом ответе ошибку, призываю поправить, мне это тоже будет полезно)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы