Когда удалять слушателей событий? - PullRequest
0 голосов
/ 23 января 2011

Откуда вы знаете , когда вы должны удалить прослушиватели событий?

Например, я знаю, что если у меня есть прослушиватель TimerEvent, я могу безопасно удалить это событие, когда я остановился и/ или удалил мой таймер.

Или, если у меня есть экранный объект на сцене, и я удаляю его, я могу безопасно удалить любые прослушиватели событий, связанные с экранным объектом.

Есть еще примеры?

1 Ответ

5 голосов
/ 23 января 2011

Существует две причины для удаления прослушивателей событий:

  1. Вы больше не хотите получать события по любой причине.Это довольно просто.Ваш код закончил прослушивание и отключил его.

  2. Вы закончили с объектом и хотите, чтобы он был собран мусором.Это более тонкий момент, но если его не сделать правильно, это может привести к реальным утечкам памяти.Видите ли, когда наблюдатель добавляет слушателя события к наблюдаемой, наблюдаемая сохраняет ссылку на наблюдателя.Из-за этого вы можете освободить свою ссылку на наблюдателя, подумать, что он будет собирать мусор, но не будет, если наблюдаемое все еще живо.Поскольку наблюдаемая не может знать, когда освободить слушателя, вы фактически создали утечку памяти!Ваш код не имеет явной ссылки на него, поэтому вы не можете отцепить его, и наблюдаемое не сделает этого никуда.Итак, если вы хотите, чтобы объект был полностью разыменован и, следовательно, должным образом собран мусором, вам необходимо удалить прослушиватель событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...