Actionscript 3 垃圾收集外部加载的SWF资产
我有一个类,它从加载的.swf文件中提取库类。我注意到,每次我从应用程序中的某个阶段移除类时,类实例都不会被垃圾收集。有什么建议吗Actionscript 3 垃圾收集外部加载的SWF资产,actionscript-3,garbage-collection,Actionscript 3,Garbage Collection,我有一个类,它从加载的.swf文件中提取库类。我注意到,每次我从应用程序中的某个阶段移除类时,类实例都不会被垃圾收集。有什么建议吗 package com.fullclip.utils { import com.greensock.loading.LoaderMax; import com.greensock.loading.SWFLoader; import flash.display.DisplayObject; public class LibraryAssets { pub
package com.fullclip.utils {
import com.greensock.loading.LoaderMax;
import com.greensock.loading.SWFLoader;
import flash.display.DisplayObject;
public class LibraryAssets {
public static function getAsset(id:String, librarySRC:String):DisplayObject {
return getAssetFromLoader(id, LoaderMax.getLoader(librarySRC) as SWFLoader);
}
public static function getAssetFromLoader(id:String, library:SWFLoader):DisplayObject {
try {
var AssetClass:Class = library.getClass(id);
return new AssetClass() as DisplayObject;
}
catch (error:Error) {
Console.log("Could not find library asset: " + id);
Console.warn(error, error.getStackTrace());
}
return null;
}
}
}
不确定自定义类/lib如何处理卸载,或者它们提供了什么实用程序来卸载,但我确信它们最终会在代码的某个地方使用Loader对象。在这种情况下,您需要显式调用unloadAndStop(true),这会向GC提供一个提示,让它知道它现在可以在加载的swf上收集和处置。查看文档了解更多信息:()我的swf包含大量资产,我无法卸载整个swf,因为这样我需要重新加载它才能取回资产。如果您仍在使用它,那么您就无法合理地期望GC清理swf……是的,这似乎是此方法的一个限制。为了方便起见,我将把所有精灵转换成位图,并保留位图数据的静态版本,以便在需要时随时使用。如果我需要引入带有动画的MovieClips,我可以将它们作为自己的swf引入。