![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2015
Сообщений: 20
|
допустим у меня в векторе хранятся объекты которые я хочу удалить.
я делаю var layer:Layer; for (var i:int = _layers.length-1; i >= 0; i--) { layer = _layers[i]; if (layer.hasEventListener(StateEvent.CHANGE_STATE)) { layer.removeEventListener(StateEvent.CHANGE_STATE, dispatchEvent); } layer.dispose(); _layers.pop(); } Теперь сам dispose, если в объекте который я удаляю есть массив, то после удаления всех элементов из него, нужно занулить сам массив? Что еще нужно занулять? Все объекты который созданы через new? А ссылки на объекты которые были переданы из вне? Number'ы и Boolean'ы занулять не нужно? Поправьте или подтвердите пожалуйста мои предположения |
|
|||||
|
Этой проверки делать не нужно, removeEventListener корректно отработает, если слушатель не присоединен.
Замените на for each; и pop() делать не нужно, так как после цикла идет Аналогичная правка к первому циклу. Простые типы занулять не нужно. Кроме того, если уничтожается полностью весь контейнер со всем его содержимым, достаточно убрать только слушатели событий, которые МОГУТ произойти (enterFrame, timerTick и тому подобные), — чтобы они не срабатывали после удаления, но до того, как GC все заберет. GC сам уничтожит все, что надо. Другими словами, нужно отрубить один раз всю ветку дерева, чем ломать ее по чуть-чуть много раз, чтобы в итоге прийти к тому же. Исключение из правил - всякие XML, BitmapData, Socket и тому подобное, у чего нужно вызывать dispose/disconnect руками.
__________________
тут я |
|
|||||
|
Регистрация: Sep 2015
Сообщений: 20
|
а String'и нужно занулять или они тоже простые типы?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 04:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|