2011-01-23 73 views
0

你怎麼知道你應該刪除事件監聽器?什麼時候刪除事件監聽器?

例如,我知道如果我有TimerEvent偵聽器,當我停止和/或刪除我的計時器時,我可以安全地刪除該事件。或者,如果我在舞臺上有一個顯示對象,並將其刪除,則可以安全地刪除與顯示對象關聯的任何事件偵聽器。

還有其他的例子嗎?

回答

5

有兩個原因移除事件偵聽器:

  1. 您不再希望接收無論出於何種原因事件。這非常簡單。您的代碼已完成偵聽並將其關閉。

  2. 你完成了這個對象,並且你希望它被垃圾收集。這是一個更微妙的,但如果不恰當的話會導致真正的內存泄漏。您會發現,當觀察者向觀察者添加事件偵聽器時,observable會保留對觀察者的引用。因此,你可以釋放你對觀察者的引用,認爲它會被垃圾收集,但如果可觀察者仍然活着,它就不會。由於observable無法知道何時釋放偵聽器,因此您已經有效地創建了內存泄漏!你的代碼沒有明確的引用,所以你不能解開它,並且observable不會做它。所以,如果你想要一個對象被完全去引用,並因此正確地進行垃圾收集,你需要刪除事件監聽器。