Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Event-callback-сироты (http://www.flasher.ru/forum/showthread.php?t=119187)

elmortem 14.12.2008 17:50

Event-callback-сироты
 
Я как-то не задумывался про зачистку памяти от событий и их callback-функций. Есть у меня примерно такой код:
Код:

mov.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
  e.currentTarget.parent.removeChild(e.currentTarget);
});

Память загадится или при удалении mov удаляются и все его события и функции-сироты?

P.S. Естественно, если функция имеет свой дом (: я событие удаляю по нормальному перед удалением объекта.

wvxvw 14.12.2008 18:28

Это уже один из поводов никогда не использовать конструкцию из кода выше.

mre 14.12.2008 18:31

Нужно подписывать на нормальные функции.

etc 14.12.2008 18:56

Нужно подписывать не функции, а методы экземпляров класса.

elmortem 14.12.2008 19:22

Ну, я примерно так и думал, просто сложно отказать себе в JavaScript-стайл-программировании.
А на поставленный вопрос кто-нибудь ответит? (: Что случится, если всё-таки писать так, как в примере?

etc 14.12.2008 19:27

Случится запор в памяти.

elmortem 15.12.2008 16:26

А если конструкция будет примерно следующая?..
Код:

mov.myNewMethod = function(e:MouseEvent):void {
  this.removeEventListener(MouseEvent.CLICK, this.myNewMethod);
  this.parent.removeChild(this);
}
mov.addEventListener(MouseEvent.CLICK, mov.myNewMethod);

Память не будет страдать нехорошими болезнями? (:

mre 15.12.2008 18:32

Если сможете отписаться, то не будет.
Но зачем использовать такие кривые конструкции?

elmortem 15.12.2008 19:13

Ясно. А что в этих конструкциях кривого?
Не создавать же мне 50 своих классов только для того, чтобы сделать им 50 методов, отнаследовать 50 мувиков от этих классов, чтобы можно было нормально подписаться/отписаться на события.
По моему кривая конструкция - у Гарбаж Коллектора.

wvxvw 15.12.2008 19:29

1. есть динамические классы.
2. что предпочтительно - вы ведь в любом случае создаете объект класса, так какая вам разница, будете вы создавать объекты типа Sprite или CustomSprite? Я не верю, что нужно 50 разных методов... скорее всего можно обойтись 2-3 разновидностями... ну десятком на крайняк, но их все равно нужно будет написать в таком случае, так что работы ну уж точно не прибавится.


Часовой пояс GMT +4, время: 23:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.