作者aquarianboy (高 见龙)
看板Flash
标题Re: [讨论] 物件占用资源的问题
时间Thu Sep 2 01:28:12 2010
※ 引述《justaID (快乐崇拜)》之铭言:
: 想请教以下各种情况,对资源的影响:
: 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上,但依然占着资源?)
AS3有个东西叫做display list
只有被加到display list里的东西,才有机会在画面上被看到
怎麽让东西加到display list? addChild(当然addChildAt也是)
反之,透过removeChild就是把东西移出display list
要注意的是移出display list跟visible = false是不一样的事情
一个是根本不在场景上,一个是在场景上只是看不到而已
1. 是
即使不在display list也一样,new的动作就是跟电脑要一块记忆体来用
所以看不到也还是占记忆体
2. 是,也不是
变数x一开始指向一个new Apple,过没多久换指向new Banana
因为new Apple不再被x所指向,系统就会认为它没人要,是"准备"要丢掉的东西了
至於什麽时候丢掉? 这就由GC机制决定了..也许很快,也许一下子
在GC还没把垃圾收走的那个当下,它的确是占两份资源
收走了,就是只占一份了
3. 否
同1,不在display list只是代表它不会被render出来让你看到
但它还是存在记忆体里的
--
http://blog.eddie.com.tw/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.139.9
1F:推 ericinttu:请问Flash有特别针对GC做处理吗? 像状况2在C, 除非程式 09/02 01:47
2F:→ ericinttu:终止, 要不然是回收不回来的(或许有别的方式但我不会) 09/02 01:48
3F:→ ericinttu:另外, 关於 不在场景里 跟 visible=false 的情况下, 对 09/02 01:50
4F:→ ericinttu:画面更新速度而言, 两者是否有差异? 09/02 01:51
5F:推 dsmwang:我猜有差吧?在场景列表里的应该还需要检查一次。 09/02 02:08
6F:→ justaID:感谢详细解说! 依照第2点的解说,如果是Array用splice() 09/02 02:47
7F:→ justaID:移除元素,被移除的元素因为不再被阵列所指,就被列为准备 09/02 02:48
8F:→ justaID:丢掉的垃圾,这样对吗? 09/02 02:49
9F:→ justaID:(以上前提: 已经从画面上removeChild() ) 09/02 02:49