2011-09-17 52 views
1

弱引用的偵聽器是否必須被刪除才能發生垃圾收集?即使它們被弱引用,或者我們可以指望垃圾收集器恰當地處理它們,是不是很好的做法?AS3:弱引用必須被刪除?

回答

1

您不必手動刪除弱聽者,以便對垃圾進行垃圾回收。不註銷監聽器會導致大部分內存泄漏,所以使用弱監聽器可以顯着提高程序的穩定性。

但是,爲了防止在準備好之前刪除弱聽者,必須至少有一個強引用(或使用實例方法)。這通常意味着無論註冊偵聽器需要保留它,直到父類的引用已被刪除。只要實例擁有組件最常見的偵聽器,就會使偵聽器持續下去。

有些情況下您必須管理監聽器,那就是如果您計劃不聽父母的整個生活。可能的情況下,你想刪除偵聽器,然後在稍後添加它,不常見,但它發生。這就是弱聽者對強大的參考聽衆沒有任何優勢。

垃圾收集器將刪除微弱的偵聽器,一旦強引用刪除。弱聽者使清理更簡單。雖然人們很謹慎,但我相信你會聽到,因爲弱聽者對於UI框架來說相當新穎。當GC被添加到主流語言時,大多數人也對此過於謹慎。

我們依靠GC來清理內存,這可以工作並且使代碼更加穩定,而且現在人們不會調用那些草率的代碼。弱聽者沒有什麼不同。

0

我從來沒有使用弱引用,但我非常小心地刪除所有聽衆,當我不再需要它們時。我認爲最好養成一種習慣,總是要去掉聽衆而不是使用弱引用。

事件偵聽器中的弱引用選項主要是爲了讓您 不必手動刪除事件偵聽器。我個人傾向於 不使用它,因爲我喜歡完全控制對象獲取 標記爲垃圾回收。

Clarifications regarding weak references in actionscript listeners

http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/

0

這正是弱引用聽衆的點 - 你不嚴格需要將它們刪除了垃圾收集發生。

但是,這個功能不應該被濫用作爲一種手段來編寫草率的代碼。只有在自己無法正確清理的情況下,才應該依靠它們。如果你可以預測你什麼時候會完成一個事件的監聽,那麼你應該使用一個強引用的事件監聽器,並在完成後將其刪除。

+0

使用強引用偵聽器的好處是什麼?我在某處讀到最好總是使用弱引用:[link](http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html) – Abdulla