看板 Flash 關於我們 聯絡資訊
※ 引述《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
ericinttu:請問Flash有特別針對GC做處理嗎? 像狀況2在C, 除非程式 09/02 01:47
ericinttu:終止, 要不然是回收不回來的(或許有別的方式但我不會) 09/02 01:48
ericinttu:另外, 關於 不在場景裡 跟 visible=false 的情況下, 對 09/02 01:50
ericinttu:畫面更新速度而言, 兩者是否有差異? 09/02 01:51
dsmwang:我猜有差吧?在場景列表裡的應該還需要檢查一次。 09/02 02:08
justaID:感謝詳細解說! 依照第2點的解說,如果是Array用splice() 09/02 02:47
justaID:移除元素,被移除的元素因為不再被陣列所指,就被列為準備 09/02 02:48
justaID:丟掉的垃圾,這樣對嗎? 09/02 02:49
justaID:(以上前提: 已經從畫面上removeChild() ) 09/02 02:49