作者justaID (快乐崇拜)
看板Flash
标题[讨论] 物件占用资源的问题
时间Thu Sep 2 00:35:45 2010
想请教以下各种情况,对资源的影响:
1. 宣告某变数并new实体,但没有addChild进舞台
那该物件是否占用资源?
EX: var x=new Apple(); (此时x是否已经占用资源?)
2. 一个变数new 2次,资源也占2份吗?
EX: var x=new Apple();
x=new Banana(); (这样会Apple和Banana各占一份资源,还是Apple会释放?)
2. remove之後,是否该物件的记忆体资源就能被释放?
EX: var x=new Apple();
this.addChild(x);
this.removeChild(x); (此时x占用的资源是否被释放了?
还是不存在stage上,但依然占着资源?)
--------------------------------------------------------------------
用 / 爬"资源",找到一篇文章讨论到资源
在推文里有神人(人称的CJ神?!)
解释Flash管理记忆体的方式(garbage collector)
原理大概可以体会,但实际上怎麽运作还是一头雾水
所以用上面3种很具体的情况来发问
谢谢~
(下面附上神人的解说)
推 cjcat2266:Flash管理记忆体的方式是garbage collector 11/08 00:08
→ cjcat2266:Google一下可以查到GC的运作机制 11/08 00:08
→ cjcat2266:简单来说,当有一个物件你不需要使用的时候 11/08 00:08
→ cjcat2266:可以让装载它reference的变数值为null 11/08 00:08
→ cjcat2266:当一个物件不再被任何一个变数装载refernce的时候 11/08 00:09
→ cjcat2266:GC就会在需要记忆体的时候去把该物件从记忆体上消除掉 11/08 00:09
→ cjcat2266:因为它再也没有办法被存取到,所以它占用着记忆体 11/08 00:10
→ cjcat2266:至於你说的function里面宣告变数,这叫local variable 11/08 00:10
→ cjcat2266:一离开function之後该变数就不见了 11/08 00:11
→ cjcat2266:如果该变数是某个物件唯一的reference 11/08 00:11
→ cjcat2266:那该物件也会在适当时机被GC处理掉
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.44.9.235
※ 编辑: justaID 来自: 114.44.9.235 (09/02 00:42)
1F:推 dsmwang:1.会占用资源,但是占多占少要看Apple有没有耗资源的方法 09/02 01:00
2F:→ dsmwang:2.因为那个Apple再也存取不到了,所以会被释放,只占一份 09/02 01:00
3F:→ dsmwang:3.remove了,但是x仍然存在,同1 09/02 01:01
4F:→ dsmwang:虽然他会帮你删,但其实可以手动用delete语法删掉~ 09/02 01:11
5F:→ justaID:感谢解答! 请问手动删要用什麽函数? 09/02 02:44
6F:→ justaID:眼残了,里有delete的解说 09/02 15:10