我正在处理内存分配(以及一般的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函数中的'new Point ...'位。因此,每次调用该函数时,都会分配新内存来存储Point对象。
因为没有对Point的引用(比如var a:Point = new Point(...))这是否意味着垃圾收集器会在调用函数后为“new Point”释放内存?
写下类似的东西会不会更好:
var a:Point = new Point();
在enterFrame函数之外,然后在enterFrame函数内写:
a.x = redClip.x
a.y = redClip.y
这样你就可以重用变量引用的内存了吗?
如果我对记忆的初步理解是错误的,请纠正我。
答案 0 :(得分:4)
GC在执行函数后不会立即回收内存,但只要发生扫描,Point对象就有资格进行垃圾回收。 Flash GC在需要时回收内存。
您可以在函数外部声明Point对象,以便只创建一个,但是当您完成它时,您必须记住销毁对它的任何引用。我认为任何效率提升都是微不足道的。