![]() |
Как убить счетчик. Не работает Timer.stop()
од из Колина Мука, который я пытался скомпилировать, содержал не поддерживаемый уже класс счетчика, который я заменил на класс Timer. Счетчик создать удалось, проблема в том, как его остановить. Timer.stop() не работает. Без остановки всё нормально компилируется и запускается.
Код AS3:
|
Код AS3:
|
Цитата:
Код AS3:
Код AS3:
Stan has died. TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at VirtualPet/digest() at flash.utils::Timer/_timerDispatch() at flash.utils::Timer/tick() PS У меня setInterval( ) CS4 не компилирует и выдает ошибку. |
Ыыы... ночью писал - лажу написал)))
Код AS3:
|
Цитата:
1. почему в вашем коде не используется созданная в конструкторе переменная digestIntervalID? 2. зачем после e.target.stop( ) еще и событие удалять? |
Цитата:
|
1. Потому, что в такой реализации эту переменную видно только в самом конструкторе. Чтобы ее было видно в других методах, ее надо объявить в теле класса, а не в конструкторе, тогда ее можно будет использовать для идентификации нашего таймера. Но можно этого не делать, т.к., когда таймер отправляет событийный объект (у меня "e" - от слова event), который передается в приемник digest, то этот событийный объект "e" содержит ссылку на таймер, который его отправил (e.target - ссылка на таймер).
2. Когда вы подписываетесь на какое-то событие, слушатель висит в памяти, если не отписываться от них, то в емком приложении с течением времени могут возникнуть проблемы с памятью, отсюда проблемы с производительностью. Там еще много чего плохого от забытых в памяти слушателей может случиться - Мук это все хорошо описывает в своей книге. |
Спасибо, всё очень доходчиво. Мук в процессе.
|
| Часовой пояс GMT +4, время: 15:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.