我正在使用ActionScript 3(即,我們使用的Flex很少)編寫的Flex/Air應用程序(使用PureMVC)。視圖組件添加到主應用程序窗口中的畫布對象,然後這些視圖加載其他影片剪輯,圖像文件等。銷燬從舞臺上刪除的對象(及其子)
當我從舞臺上刪除視圖時,我使用application.canvas.removeChild(...)
來執行此操作。這會在該視圖的PureMVC調解器中觸發一個事件,該事件將刪除設置的所有事件偵聽器,並且所有事件看起來都是花花公子。
但是,影片剪輯仍在後臺播放。他們沒有在屏幕上造成任何麻煩......但他們只是在那裏,在內存中播放某處(例如,我可以看到他們的trace
聲明),我希望他們離開。我懷疑從畫布中刪除的視圖仍然存在,但我無法證明它。
將視圖設置爲null
不會執行任何操作。我很驚訝AS3不包含任何簡單而有效地銷燬顯示對象及其所有子項的方法。
是否只有這樣才能沉悶地卸載所有的影片剪輯等,然後希望Flash能夠清理它們?
我打算髮表我自己的回答,但我最終會說大部分是同樣的事情(+1),但我要補充的一件事是eventListeners是保持實例活動的時間比應該長的一個大罪魁禍首。如果您不能明確地分離處理程序,那麼添加處理程序作爲[弱引用](http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/events/EventDispatcher.html#addEventListener())可以提供幫助處理程序。 –
也使用適當的分析器,就像Flash Builder Pro中的分析器一樣,這是一種更好的方式來獲得有關內存使用和GC行爲的一些硬編碼。 –
是的,弱處理程序是一個好主意,我希望它們是默認的。如果在這種情況下框架正在處理它們,那麼它們可能不是問題,但仍然是好的。 – fenomas