2013-07-07 35 views
0

使用加載程序有一些問題,我覺得我需要完全理解unloadAndStop()方法的工作方式。我正在處理一個在運行時需要加載多個swfs的項目。爲此,我一直在使用一個加載器,並在完成時將其內容提取到緩存中。加載程序方法unloadAndStop()行爲

單裝載機通過,我沒有寫一個擴展類實現的,它似乎實行「unloadAndStop(真)在新的URLRequest加載時方法。

現在,我已經有一些使用這個系統的奇怪的問題,我已經追溯到unloadAndStop(true)調用,根據Adobe文檔停止音頻,回放和標誌供垃圾收集器清除。顯然,這不是我想要的;我仍然在舞臺上和緩存中引用這個對象!我覺得有一種方法可以直接用這種方式標記垃圾收集的東西,據我所知,沒有其他方法可以做到這一點。

因此,這使我想到,爲了正確地移除加載了加載程序的東西,您需要以的方式卸載它。是這樣嗎?如果我加載了某些內容,將其內容提取到movieClip1,加載一個新的movieClip,然後刪除對movieClip1(原始加載程序內容)的所有引用將被垃圾回收,還是必須通過unloadAndStop方法刪除它?

TL; DR:

是否有必要從裝載機調用unloadAndStop(真),以機制保障任何它加載會從內存中刪除,也可以加載器加載其他的URLRequest無需擔心內存泄漏的?

回答

0

它在文檔很好地描述:

GC:布爾(默認爲真) - 提供一個提示垃圾回收器對子SWF對象是(true)否(false)運行。如果異步卸載許多對象,則將gc參數設置爲false可能會提高應用程序的性能。但是,如果參數設置爲false,則在運行unloadAndStop()命令後,子SWF文件的媒體和顯示對象可能會保留在內存中。

這是因爲你可以有一些SWF,得到一些特定的孩子,並刪除SWF。但你一直參考它的孩子,這意味着孩子不會被垃圾收集。但是如果你強迫GC檢查孩子,它會嘗試標記所有的孩子收集,並留下使用的孩子。

所以基本上,沒有必要強制GC來清理。最好也是最重要的做法是從舞臺中刪除所有內容,並清除所有對它的引用。 GC遲早會受到檢查。 unloadAndStop是一個不跟蹤他正在做什麼的人的快捷方式,只是一種安全措施,以確保您儘可能多地進行了清理。

我個人不使用它。