2010-07-29 73 views
1

使用Adobe Flex 3,有沒有什麼辦法可以指定一個finaliser?Finalisers在Adobe的Flex 3

+0

爲什麼你需要一個finaliser?也許還有其他方法可以實現這一點。 – splash 2010-07-29 13:01:30

+0

@splash:從技術上講,我不需要*終結者 - 我可以(可能)識別對象的生命週期並自己在正確的位置調用代碼。我只是希望能夠過上更輕鬆的生活...... – 2010-07-29 13:15:06

+0

AVM中的對象被GC銷燬,所以你不知道什麼時候(如果有的話)你的對象被破壞了。這與.NET對非託管資源使用IDisposable的原因完全相同。 – 2010-07-29 14:18:34

回答

5

沒有在ActionScript 3 finaliser /析構函數的概念,即使是在AVM /字節碼級。

0

即使沒有這樣的事,作爲在ActionScript本身析構函數/終結我會認爲這是很好的做法,有一個釋放所有的資源類,當你不再需要它們的方法。

垃圾收集只挑選了不再需要的任何地方的對象,它使用引用計數來確定何時是這種情況。所以只要有未被消除的事件偵聽器,循環依賴(對象引用對方)等等,你可能不會注意到它,但是你的內存使用量會不斷增加,並且GC根本不會釋放這些資源。

因此,您應該destroy()finalize方法:

  • 刪除所有事件偵聽器
  • 調用嵌套對象上的destroy()finalize()
  • delete S IN字典
  • 所有強大的對象鍵
  • 將所有對象類型變量null(也沒關係原始值不被重置)

對於顯示對象,調用Event.REMOVED_FROM_STAGE時調用此方法通常不是一個壞主意。