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