AS3: создание объектов, подходящих для GC, путем подсчета ссылок

Я прочитал очень хорошую статью о том, как Flash выполняет сборку мусора: http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

Но мне было интересно, что все, что вам нужно сделать, чтобы убедиться, что все ваши объекты были собраны мусором с помощью более быстрого метода подсчета ссылок, а не более интенсивного ЦП метода маркировки и очистки. Предположим, у меня есть следующая функция, и я создаю с ней объект:

function makeIt():void {
    var spriteA:Sprite = new Sprite();
    var spriteB:Sprite = new Sprite();
    spriteB.addEventListener(MouseEvent.CLICK, myCallback);
    var spriteC:Sprite = new Sprite();
    spriteA.addChild(spriteB);
    spriteB.addChild(spriteC);
    stage.addChild(spriteA);
}

Если бы я просто сделал следующее, было бы это приемлемо для GC только по метке и развертке?

spriteB.removeEventListener(MouseEvent.CLICK, myCallback);
stage.removeChild(SpriteA);

У родителей есть ссылки на своих детей, а у детей есть ссылки на своих родителей, поэтому должен ли я делать все это, чтобы он подходил для GC по подсчету ссылок?

spriteB.removeChild(spriteC);
spriteB.removeEventListener(MouseEvent.CLICK, myCallback);
spriteA.removeChild(spriteB);
stage.removeChild(spriteA);
spriteA = null;

Должен ли я также установить для spriteB и spriteC значение null? А что, если бы spriteC был вместо этого экземпляром класса, который расширяет Sprite и имеет несколько собственных свойств. Должен ли я обнулить их тоже?


person BladePoint    schedule 19.10.2013    source источник
comment
Установка нулевых значений spriteB и spriteC не будет иметь никакого эффекта. Это локальные переменные функции. Также нет необходимости удалять обработчик событий, потому что сам обработчик не будет удален, но он также не создает зависимости для диспетчера.   -  person    schedule 21.10.2013


Ответы (1)


Да, вам придется удалитьChild, removeEventListener и установить локальные ссылки (или ссылки на уровне класса), чтобы обнулить счетчик ссылок.

person catholicon    schedule 09.01.2014