|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
На тормоз в автомобиле жать
Цитата:
Цитата:
Кто мне запретит 1000-ми рассылать самому MouseEvent ? И все кто подписаны будут их ловить.
__________________
http://www.chessmax.ru |
|
|||||
))
тем, не менее, где-то здесь @etc (могу ошибаться, но кажется все-таки @etc) писал, что не обязательно отписывать слушателей внутренних событий в удаляемом объекте... тоже о чём то народ спорил... Но, я всё равно отписываю всех слушателей - так, на всякий случай, в порядке армейского ... а Можно проверить профайлером, это вроде не сложно. |
|
|||||
Когда избавлялся от утечек памяти дошел до того, что даже для самых мелких вещей сделал метод destruct(); в котором сносились все листенеры со всех полей, ремувились ДО, вызывался деструкт младших уровней и занулялись ссылки. Только после этого получилось очищать полностью память.
Когда на сцене был, а потом сплыл многоярусный контейнер, он тоже любит повиснуть иногда в памяти, если его не разобрать на кусочки. Вот пример (смотрите в приложении): Классы Level0-1-2-3 -- наследники спрайта с пустым телом. package { import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.utils.getDefinitionByName; import flash.utils.setTimeout; Level0; Level1; Level2; Level3; public class DOCTest extends Sprite { public static const MAX_DEEP : int = 3; public static const WIDTH : int = 10; public function DOCTest() { fill(0, this); setTimeout(easyClear, 5000); //setTimeout(fullClear, 5000, this); } private function fill(deep : int, container : DisplayObjectContainer):void{ for(var i : int = 0; i < WIDTH; i++){ var DOCLASS : Class = getDefinitionByName("Level"+deep) as Class; var DO : DisplayObjectContainer = new DOCLASS(); trace("DO = " + DO); container.addChild(DO); if(deep < MAX_DEEP){ fill(deep+1,DO); } } } private function easyClear():void{ while(numChildren){ removeChildAt(0); } } private function fullClear(container : DisplayObjectContainer):void{ while(container.numChildren){ var DOC: DisplayObjectContainer = container.removeChildAt(0) as DisplayObjectContainer; if(DOC){ fullClear(DOC); } } } } } http://*************/s/1oHmT -- если в памяти повис объект нулевого уровня, то тащит за собой цепочку детей. А если рекурсивно разделить все от всего, то вот такой (который тоже не идеален. почему -- увы, не знаю, надеюсь, кто-нибудь объяснит) http://*************/s/1oHkQ Так что очистить все слушатели, задеструктить и занулить все, до чего дотянешься -- святое дело каждого.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 13.12.2011 в 20:36. |
Часовой пояс GMT +4, время: 10:37. |
|
« Предыдущая тема | Следующая тема » |
|
|