У меня есть «фреймворк» в Flex, который загружает и уничтожает дочерние «секции», которые являются экземплярами классов модулей. В них много веб-сервиса и анимации в них и являются частью публичного сайта.Сбор мусора в Flex при вызове removeChild() - управление условиями гонки
Прежде чем удалить раздел с экрана, я вызываю метод интерфейса hideSection() в экземпляре. В этом методе я исчезаю любые элементы управления или возвращаю false, если секция хочет предотвратить закрытие. В настоящее время он также останавливает выполнение любых экземпляров таймера.
Проблема в том, что даже если объект раздела удален со сцены, могут остаться незавершенные вещи. Например, я могу запустить эффект, когда effectEnded запускает что-либо, или, возможно, медленный запрос веб-службы может зайти и вызвать всплывающее сообщение об ошибке.
Из-за того, как работает сборщик мусора - иногда этот объект-объект убивается раньше, а иногда и позже. Я пытаюсь свести к минимуму плохие вещи, которые происходят, когда раздел закрыт.
Я придумал следующее возможное решение. Интересно, был ли лучший.
- Имейте свойство _disposed, которое установлено в true. Внутри любого обработчика событий, который может иметь нежелательное поведение (после закрытия секции), я бы просто сказал
if (_disposed) { return; }
. - Может также понадобиться реализовать интерфейс IDisposable, например, в .NET.
Действительно ли это мой единственный вариант - или я могу как-то ускорить сбор мусора. Может ли сбор мусора даже произойти, если все еще есть эффекты?
Мне также интересно узнать, нужно ли мне устанавливать вещи в _null, особенно таймеры. Или достаточно просто остановить() таймер, чтобы получить сбор мусора, если нет ссылок на него.