Удаление объекта со сцены, удаление слушателей событий и установка всех ссылок на null
должно быть достаточно - GC подберет его при следующем выполнении.
Однако утомительно отслеживать все ссылки (и помните, что это включает слушателей событий, если вы не установили useWeakReference
в true), если у вас нет стандартного способа сделать это ... Это Желательно иметь функцию «деструктор» в каждом классе, которая заботится об очистке всех переменных и прослушивателей событий, когда объект больше не нужен.
Вы также можете комбинировать их с событиями - я пришел к выводу, что хорошей практикой является выполнение вашей init()
функции на Event.ADDED_TO_STAGE
и функции destroy()
на Event.REMOVED_FROM_STAGE. Таким образом, у вас есть четко определенный жизненный цикл для сценических объектов, и если вы убедитесь, что ваш метод destroy()
останавливает все анимации и звуки, удаляет всех дочерних элементов и слушателей событий и устанавливает для всех полей переменных-членов значение null
, вы можете уверен, что больше нет никаких действий, которые могли бы вызвать нежелательные побочные эффекты.
Кстати - если вы на самом деле замечаете любое действие с объектом, который вы удалили, некоторые ссылки, безусловно, все еще должны быть нетронутыми - как еще вы могли бы узнать?
Тем не менее, нет способа узнать, когда именно GC подберет отброшенный объект - это управляется виртуальной машиной, и вы не получите сообщение, когда это будет сделано. И вы не должны думать о том, когда освободить память - ведь именно для этого и были изобретены сборщики мусора!
Если вы сделаете привычку убирать за собой, ваши программы будут неизбежно становиться более стабильными, потреблять меньше памяти и в конечном итоге работать лучше. Это все, что должно иметь значение.