Flash ActionScript 3 - есть ли утечка памяти в этой функции? - PullRequest
1 голос
/ 02 ноября 2011

Я разбираюсь с распределением памяти (и ActionScript 3 в целом), и я наткнулся на такую ​​функцию в руководстве:

addEventListener(Event.ENTER_FRAME, enterFrame);

function enterFrame(e:Event):void
{

if(redClipBmpData.hitTest(new Point(redClip.x, redClip.y),255,blueClipBmpData,new Point(blueClip.x, blueClip.y),255))

trace("hit");

}

Часть, о которой я беспокоюсь, это бит "новая точка ..." в функции hitTest. Таким образом, каждый раз, когда вызывается функция, выделяется новая память для хранения объекта Point.

Поскольку нет ссылок на Point (например, var a: Point = new Point (...)), означает ли это, что сборщик мусора освободит память для «новой точки» после вызова функции?

Было бы лучше написать что-то вроде:

var a:Point = new Point(); 

вне функции enterFrame, затем в функции enterFrame напишите:

a.x = redClip.x

a.y = redClip.y

Так что вы повторно используете память, к которой относится переменная?

Пожалуйста, поправьте меня, если мое предварительное понимание памяти неверно.

1 Ответ

4 голосов
/ 02 ноября 2011

ГХ не будет немедленно восстанавливать память после выполнения функции, но объекты Point будут иметь право на сборку мусора всякий раз, когда происходит очистка.Flash GC восстанавливает память, когда это необходимо.

Вы можете объявить объект Point вне функции, чтобы когда-либо создавался только один, но затем вы должны помнить, чтобы уничтожить любую ссылку на него, когда высделано с этим.Я думаю, что любое повышение эффективности будет незначительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...