2011-01-20 58 views
5

最近我發現自己經常在任何地方寫下removeEventListeners,這使代碼變得非常混亂。我知道這是一個最佳實踐,但總的來說它沒有意義。垃圾收集器應該自己處理這樣一個簡單的任務,不是嗎?當對象設置爲空時,是否很難自動刪除所有偵聽器?動作腳本:是否將對象設置爲空,自動刪除所有附加的事件偵聽器?

所以我只是想確定如果是這樣的話。是否將對象設置爲null,自動刪除所有附加的事件偵聽器?

對此有何見解?

UPDATE: 在我的情況是這樣的 - 我創建一個對象,並附加一堆事件偵聽器給它,然後有一段時間我需要重新初始化這個對象之後。當然,將這個對象設置爲null會比用手解綁每個監聽器容易得多。而大部分聽衆都是匿名函數,這意味着沒有代碼重構是不可能的。當我簡單地重新初始化一個變量新的我沒有得到重複的聽衆等,但我不知道它是以前的價值,隨着所有的聽衆得到垃圾收集。是嗎?

+2

Casalib是一組很好的類,可以幫助您簡化垃圾收集。當你有很多顯示對象時很有用。 – redconservatory 2011-01-20 15:32:02

+0

+1 for casalib - http://as3.casalib.org/docs/org_casalib_display_CasaMovieClip.html查看removeChildrenAndDestroy()函數 – Daniel 2011-01-20 15:33:37

回答

4

不,你不是將對象設置爲null,而是指向它的指針。垃圾收集不會被垃圾收集挑選出來,除非該程序的任何其他部分(包括偵聽程序)都不需要它。你需要自己刪除所有的監聽器,但是這不應該阻止你找到一個不那麼麻煩的方式來做到這一點 - 比如專門的clearListeners方法或者幫助類等。

+0

我經常嘗試爲我構建的每個類實現一個IDisposable接口。這迫使我負責實施將減輕垃圾收集過程的代碼。 – OXMO456 2011-01-20 16:33:18

0

我相信你需要使用弱引用當你分配監聽器,而不是「nulling」就足夠了。

相關問題