ActionScript - 用于内存管理的原始/非原始对象之间的区别?

时间:2011-07-04 10:16:10

标签: actionscript-3 memory-management garbage-collection primitive-types

我的理解是,对于垃圾收集,类的基本类型( uint,string,Number等)不需要设置为null。

例如,我不需要在以下类中编写此dispose()方法:

package
{
//Imports
import flash.display.Shape;

//Class
public class DrawSquare extends Shape
    {
    //Properties
    private var squareColorProperty:uint;

    //Constructor
    public function DrawSquare(squareColor:uint)
        {
        squareColorProperty = squareColor;

        init();
        }

    //Initialize
    private function init():void
        {
        graphics.beginFill(shapeColorProperty);
        graphics.drawRect(0, 0, 200, 200);
        graphics.endFill();
        }

    //Dispose
    public function dispose():void
        {
        squareColorProperty = null;
        }

    //Get Shape Color
    public function get squareColor():uint;
        {
        return squareColorProperty;
        }
    }
}

如果这是真的,我相信它是什么,原始类型的对象和非原始类型的对象有关内存分配的区别是什么?

2 个答案:

答案 0 :(得分:6)

据我所知,Flash播放器VM中GC逻辑的最完整详细说明位于in the blog of Alex Harui, written back in 2007。直接链接:GCAtomic.ppt

And here are some useful hints on GC from Grant Skinner.

GC逻辑处理引用和引用计数。由于您无法在ActionScript中获取对基元的引用,因此您无法在此方面对GC执行任何操作。

编辑刚刚记得格兰特斯金纳的另一个nice set of articles on GC and resource management

答案 1 :(得分:1)

GC会删除任何对象未强引用的对象。根本没有引用原始类型字段 - 它们的值直接存储在包含对象的内存中(至少我认为是这样)。

我希望它有所帮助。