2011-01-23 3 views
0

Знаете ли вы, что , когда, вы должны удалить прослушиватели событий?Когда удалять прослушиватели событий?

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

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

Любые другие примеры?

ответ

5

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

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

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

Смежные вопросы