加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:25:47 所属栏目:百科 来源:网络整理
导读:我想知道关于Flash中垃圾收集的Object类型. 我知道在这种情况下,物品将为垃圾收集做好准备: // createvar ar:Array = [];var mc:MovieClip = new MovieClip();mc.addEventLisntener(blah,blah);ar.push(mc);addChild(mc);// kill gcar.splice(0,1);mc.remov
我想知道关于Flash中垃圾收集的Object类型.

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

// 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);

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

假设我在我的类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];
            }
        }
    }
}

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

var mmc:MartysMC = new MartysMC();

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

mmc.update(dataObject);

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

mmc.update({x:15,y:18,name:"marty"});

解决方法

要查看GC发生了什么,您可以使用 Dictionary,其弱引用设置为true,并使用您想要作为键的对象:

var d:Dictionary = new Dictionary(true)
d[myObject] = whatever

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

这里有一个基于你在wonderfl的例子的完整示例:
http://wonderfl.net/c/e9W4

你很快就看到你的对象都被垃圾收集了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读