![]() |
Анонимная функция и сборщик мусора
Объясните, пжлст, почему анонимная функция в приведённом примере не подвергается сборке мусора.
FP дебажный. Просто изучаю, в производстве не использую :) Код AS3:
Цитата:
|
Анонимная ф-ция здесь только обработчик добавления на сцену, которая вызывается один раз и в которой таймеру вешается обработчик (не анонимный) и запускается таймер. Где связь между вашим трейсом и тем утверждением, что gc не собрал анонимную ф-цию?
|
Объект timer - локальная переменная для анонимного обработчика. Если существует он, то существует и функция. Я не прав?
|
В корне не правы.
Все переменные создаются в куче, на стеке ничего не создаётся. Вы запросили у среды таймер (через new) а потом результат, ссылку на него, положили к себе в локальную переменную. Когда выполнение функции завершилось локальные переменные были уничтожены. Т.к. вы отписались, а вы вроде отписались, то ссылок ни на таймер ни на анонимную функцию не осталось. И функция скорее всего была уничтожена. Но тикающий таймер тикает сам по себе и не будет удалён пока тикает. А вообще анонимные функции это зло. Используйте нормальные. |
Таймер вообще всегда надо явно останавливать. Иначе его никто не удалит.
|
Спасибо за разъяснения :)
Не знал, что Timer такой особенный. В таком случае, подскажите, как можно проверить собралась ли анонимная функция коллектором? |
Ну, для таких вещей вобщем-то и придумали профилировщик. Для уверенности - создайте несколько тысяч, и смотрите как будут себя вести, чтобы случайно не перепутать с какими-нибудь другими функциями.
|
| Часовой пояс GMT +4, время: 11:00. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.