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