1

我想知道在卸載swf之後可以刪除所有數據。從主SWF發佈應用程序域

調用Loader.unloadAndStop();刪除內容和加載的字節,但加載的類停留在應用程序域中。

如果我加載它到分開的新的ApplicationDomain,gc將在卸載並刪除所有引用後收集它們?

+0

對於最大限度節省的存儲空間,您會遇到很多麻煩 – divillysausages

+1

我不會考慮單個字節,但關於很多圖形或bitmapData類(如遊戲的東西,聲音等)的類。 – turbosqel

回答

1

對於初學者來說,加載到域中的類在卸載時不會停留在內存中,除非保留引用。所以,如果你做了這樣的事情:

private static var foo:Class = 
    loadedSWF.loaderInfo.applicationDomain.getDefinition("Foo"); 

然後,顯然,它會留在記憶中。還有一些需要注意的事情,根據播放器版本的不同,registerClassAlias()的行爲發生了變化,如果從加載的SWF中調用該別名,該別名將被註冊到父域中,因此以後將無法進行卸載類,除非您爲另一個類註冊相同的別名。在某些後期,但不是最後一個版本,它會正確地註冊正確的域中的類,但它打破了一些人的代碼... 嘆息今天的行爲是有點不可預知的,它會嘗試確定什麼域嘗試根據該類別在該域名中使用的別名進行註冊,當然,這些別名在運行時可能會有所不同...

+0

@ wvxvw:「...您加載到域的類在卸載時不會留在內存中......」 即使我將它加載到ApplicationDomain.currentDomain中? – turbosqel

+0

謝謝,那是我需要的。 – turbosqel

+0

是的,這是我需要知道的 - 其他應用程序域類可以刪除,如果沒有引用,但加載到當前應用程序域保留。 – turbosqel