![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
В ActionScript 3 есть две возможности поставить мягкую ссылку (Weak Reference) на объект, которая не будет учитываться счетчиком ссылок.
1. При использовании класса Dictionary его конструктору можно передать параметр true, чтобы использовались мягкие ссылки на объекты. В этом случае Dictionary в качестве ключей будет использовать мягкие ссылки на объекты, которые не учитываются счетчиком ссылок и не мешают удалению объектов из памяти. var obj:Object = new Object(); dict[obj] = true; delete obj; // сборщик мусора удалит объект obj, поскольку ссылка на него из dict мягкая // addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void addEventListener(MouseEvent.CLICK, clickHandler, false, 0 true); // использовать мягкую ссылку init();
function init():void {
var test:Sprite = new Sprite();
test.addEventListener(Event.ENTER_FRAME, handle, false,0,true);
}
function handle(e:Event):void {
trace("enterFrame");
}
Экспериментально был найден способ заставить сборщик мусора сработать немедленно, нужно создать много объектов для которых потребуется выделение большого куска памяти. Подтолкнем таким способом сборщик мусора сработать по клику мышки: init();
addEventListener(MouseEvent.CLICK, immediatelyGC);
function init():void {
var test:Sprite = new Sprite();
test.addEventListener(Event.ENTER_FRAME, handle, false,0,true);
}
function handle(e:Event):void {
trace("enterFrame");
}
function immediatelyGC(e:Event):void {
trace("run GC");
var ar:Array = new Array();
for (var i:int=0; i<100000; i++) {
ar.push( new Object() );
}
}
. . . enterFrame enterFrame enterFrame run GC После клика мышки и запуска функции immediatelyGC, сборщик мусора удалил спрайт из памяти и более функция handle не вызывается. |
![]() |
Часовой пояс GMT +4, время: 15:40. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|