关于AS3中内存管理的快速问题

时间:2010-04-09 02:40:04

标签: actionscript-3 memory-management

将多次调用以下方法。我担心连续调用新的矩形会增加潜在的不必要的内存消耗,或者用于生成前一个矩形的内存被释放/覆盖以容纳另一个矩形,因为它被分配给同一个实例变量?

private function onDrag(evt:MouseEvent):void
        {
        this.startDrag(false, dragBounds());
        }

private function dragBounds():Rectangle
    {
    var stagebounds = new Rectangle(0 - swatchRect.x, 0 - swatchRect.y, stage.stageWidth - swatchRect.width, stage.stageHeight - swatchRect.height);
    return stagebounds;
    }

1 个答案:

答案 0 :(得分:4)

这是一个快速的问题,但非常重要!很少有ActionScript开发人员关注甚至考虑这些事情。所以对你赞不绝口!

每次创建新矩形时,都会为其分配新内存。一旦删除了对该矩形的所有引用,它就会变为符合条件的用于垃圾收集(GC),这意味着下次GC运行时它将从内存中释放。 (在这种情况下,当您致电stopDrag()

时,将删除所有引用

Rectangle的实例占用很少的内存,并且垃圾收集器定期运行,实例将不断被清理。此外,我们可以确定,在没有先前的实例可用于GC的情况下,将在任何给定时间创建不超过一个。 (假设您在再次致电stopDrag之前打电话给dragBounds。)

真的,这是一个你不需要担心的情​​况。你的代码很好。在遇到任何潜在问题之前,您需要数千个矩形(一次数百万个)。