AS3中对象的内存使用和垃圾回收

Mar*_*rty 5 flash garbage-collection actionscript-3

我想知道ObjectFlash中垃圾收集的具体类型.

我知道在这种情况下,物品将为垃圾收集做好准备:

// create
var ar:Array = [];

var mc:MovieClip = new MovieClip();
mc.addEventLisntener(blah, blah);

ar.push(mc);
addChild(mc);

// kill & gc
ar.splice(0, 1);
mc.removeEventListener(blah, blah);
removeChild(mc);
Run Code Online (Sandbox Code Playgroud)

但是如何/将如何Object在下面的情况下收集垃圾.

假设我在我的课程MartysMC中有一个函数可以解析Object:

package
{
    import flash.display.MovieClip;

    public class MartysMC extends MovieClip
    {
        /**
         * Updates this
         * @param obj An object containing key/value pairs to represent new property values
         */
        public function update(obj:Object):void
        {
            var i:String;
            for(i in obj)
            {
                this[i] = obj[i];
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我像这样使用这个函数:

var mmc:MartysMC = new MartysMC();

var dataObject:Object =
{
    x: 10,
    y: 34,
    alpha: 0.6
};

mmc.update(dataObject);
Run Code Online (Sandbox Code Playgroud)

怎么了dataObject?这会从这里收集垃圾吗?即便如此,这一行中的对象如何:

mmc.update({x:15,y:18,name:"marty"});
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 3

要查看 GC 发生的情况,您可以使用将弱引用设置为 true 的字典,并使用要检查的对象作为键:

var d:Dictionary = new Dictionary(true)
d[myObject] = whatever
Run Code Online (Sandbox Code Playgroud)

当该对象不再可用时,它将从字典中删除。

这是基于您在 Wonderfl 的示例的完整示例: http ://wonderfl.net/c/e9W4

您会看到两个对象很快就被垃圾收集了。