![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Уважаемые коллеги, помогите, пожалуйста советом или идеей, где собака зарыта. А то я уже в отчаянии, ситуация просто мистическая.
В главное приложение грузятся отдельные модули (swf-ки), в данном конкретном случае загружается модуль оплаты услуг, которая проходит в 3 шага, в классе этого модуля объявлена приватная переменная step. После третьего шага (step = 3) загружается модуль подтверждения оплаты. Если пользователь отменяет подтверждение, то этот модуль закрывается и посылается событие отмены операции, это событие слушает модуль оплаты и возвращает форму на шаг назад (step--). Так вот при первом вызове этих модулей все срабатывает правильно, а при втором и последующих в момент срабатывания слушателя события значение переменной step уже не 3, а 2. Ставил брейкпойнты во всех ключевых местах и в сеттере этой переменной и так и не могу отловить, где и каким образом она может поменятся: перед загрузкой она равна 3, а в событии уже 2. Как такое может быть? Ладно бы какая-то сложная функция была, можно было бы как-то проанализировать и переписать, но это простая приватная переменная, что делать - хз ![]() |
|
|||||
|
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
все слушатели вешаю через weak reference.
Я тоже подозреваю, что что-то не удаляется из памяти, но при этом все равно брейкпойнты и трейсы в листенере и в сеттере срабатывают один раз. Добавлено через 1 минуту может можно как-то отслеживать изменение непосредственно адреса в памяти, который хранит значение этой переменной? Добавлено через 24 минуты С помощью консоли отследил изменения памяти. После срабатывания сборщика мусора проблема не воспроизводится, но срабатывает он далеко не сразу. Добавил вызов System.gc() после выгрузки модулей и обнуления ссылок - помогло! но только в дебажной версии плеера ![]() Есть ли способ принудительно вызвать очистку в обычном плеере? Когда-то давно на форуме читал про это, но не могу найти поиском. Может кто подскажет? |
|
|||||
|
нет нельзя и так делать нельзя. Нужно просто полностью останавливать объекты которые вам не нужны. Там внутри этих объектов которые вы теряете что-то происходит и они имеют ссылку на вас, надо это исправить.
Хотя если очень хочется то можно http://silin.su/#AS3/utils/gc Но я бы категорически не советовал это использовать.
__________________
:) |
|
|||||
|
Есть вы модули грузите Loader'ом, вызываете потом unload() (unloadAnsStop());? Отписывайте от событий "в ручную".
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|