[討論] 物件佔用資源的問題

看板Flash作者 (快樂崇拜)時間15年前 (2010/09/02 00:35), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/2 (看更多)
想請教以下各種情況,對資源的影響: 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)

09/02 01:00, , 1F
1.會佔用資源,但是佔多佔少要看Apple有沒有耗資源的方法
09/02 01:00, 1F

09/02 01:00, , 2F
2.因為那個Apple再也存取不到了,所以會被釋放,只佔一份
09/02 01:00, 2F

09/02 01:01, , 3F
3.remove了,但是x仍然存在,同1
09/02 01:01, 3F

09/02 01:11, , 4F
雖然他會幫你刪,但其實可以手動用delete語法刪掉~
09/02 01:11, 4F

09/02 02:44, , 5F
感謝解答! 請問手動刪要用什麼函數?
09/02 02:44, 5F

09/02 15:10, , 6F
眼殘了,精華區裡有delete的解說
09/02 15:10, 6F
文章代碼(AID): #1CVe3ZrK (Flash)
文章代碼(AID): #1CVe3ZrK (Flash)