as3.0怎样完全从内存中删除new MovieClip()的实例
答案:2 悬赏:10 手机版
解决时间 2021-11-09 15:28
- 提问者网友:你挡着我发光了
- 2021-11-08 19:28
as3.0怎样完全从内存中删除new MovieClip()的实例
最佳答案
- 五星知识达人网友:空山清雨
- 2021-11-08 20:45
removeChild只是移除出显示列表,如果要回收内存空间,需要
mc = null;
就可以了
----------------------------------
当一个对象没有任何引用指向它时,AS的垃圾回收机制会自动回收它的内存地址。
所以,如果这个mc没有其他地方用到它了,那么在parent.removeChild(this)后,mc就被回收了,但是一定要是没有任何地方用到它了才行,所以建议手动置空回收比较好。
同理,如果要让被removeChild的对象重新显示,那么只需要弄一个容器来存储它,保证有对它的引用时刻存在就可以了。
比如建立一个数组,将mc放在数组里,那么在removeChild之后,还可以通过addChild(arr[i])让它重新显示。
mc = null;
就可以了
----------------------------------
当一个对象没有任何引用指向它时,AS的垃圾回收机制会自动回收它的内存地址。
所以,如果这个mc没有其他地方用到它了,那么在parent.removeChild(this)后,mc就被回收了,但是一定要是没有任何地方用到它了才行,所以建议手动置空回收比较好。
同理,如果要让被removeChild的对象重新显示,那么只需要弄一个容器来存储它,保证有对它的引用时刻存在就可以了。
比如建立一个数组,将mc放在数组里,那么在removeChild之后,还可以通过addChild(arr[i])让它重新显示。
全部回答
- 1楼网友:底特律间谍
- 2021-11-08 22:08
解决第一个问题:
在类中建立一个引用列表,当其他对象引用自身时,把引用者对它的引用属性当参数传进来,释放时,遍历该表将所有的引用置空,也就实现了对自己的释放,说起来很别扭,举个例子。
mc是一个剪辑类
mcuse对其进行实例化,实例对象为mc1
构建mc1时一般是,var mc1:mc=new mc();
现在,我需要将mcuse对它的引用当参数传进来,那么:
var mc1:mc=new mc(mcuse.mc1);
这意味着,当mc1被创建时,同时自身也得到了对mc1的引用,那么,当你需要释放mc1的内存时,将这个引用置空,也就完成了对引用的删除。
第二个问题
被remove掉的显示对象,只是从显示列表中清除,也就是从你的显存中清除,但并没有从你的内存中清除。所以,在addChild时,把显示对象压入一个数组,removeChild后,显示列表中不在了,但数组还保存对这个对象的引用,此时,再addChild,对象就可以显示出来了。
在类中建立一个引用列表,当其他对象引用自身时,把引用者对它的引用属性当参数传进来,释放时,遍历该表将所有的引用置空,也就实现了对自己的释放,说起来很别扭,举个例子。
mc是一个剪辑类
mcuse对其进行实例化,实例对象为mc1
构建mc1时一般是,var mc1:mc=new mc();
现在,我需要将mcuse对它的引用当参数传进来,那么:
var mc1:mc=new mc(mcuse.mc1);
这意味着,当mc1被创建时,同时自身也得到了对mc1的引用,那么,当你需要释放mc1的内存时,将这个引用置空,也就完成了对引用的删除。
第二个问题
被remove掉的显示对象,只是从显示列表中清除,也就是从你的显存中清除,但并没有从你的内存中清除。所以,在addChild时,把显示对象压入一个数组,removeChild后,显示列表中不在了,但数组还保存对这个对象的引用,此时,再addChild,对象就可以显示出来了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯