Flash CS6中的类加载和应用程序域主要作用于Flash应用程序的模块化开发和优化。类加载可以让我们在使用当前应用程序的同时,动态的添加或移除一些可选的模块。应用程序域则可以控制不同类之间的相互访问。
类加载
加载外部类库
动态加载外部AS文件,并将其中一个类创建为对象。可以使用Loader
来完成这个任务,代码如下:
//获取外部AS文件的文件位置
var url:URLRequest = new URLRequest("example.swf");
//创建Loader实例,加载外部AS文件
var loader:Loader = new Loader();
loader.load(url);
//监听加载完成事件
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
function onComplete(e:Event):void {
//从loader中获取加载完成的外部swf文件
var swf:DisplayObject = loader.content;
//从swf文件中获取我们要用的类(MyClass),并创建对象
var MyClass:Class = swf.loaderInfo.applicationDomain.getDefinition("MyClass") as Class;
var m:MyClass = new MyClass();
}
动态类定义
在应用程序运行时创建和定义AS3类。这个功能在一些需要动态扩展和定制的应用程序中非常有用。可以使用 ApplicationDomain
和 getDefinitionByName
函数来实现这个特性:
//创建ApplicationDomain实例
var ad:ApplicationDomain = new ApplicationDomain();
//动态定义类
var ClassDefinition:Class = defineClass("MyNewClass", Object);
var c:Object = new ClassDefinition();
//将这个新定义的类添加到应用程序域中
ad.definitionByName("MyNewClass");
应用程序域
应用程序域定义了AS3类定义的可访问范围。当我们将多个swf或AS文件合并成一个完整的应用程序时,需要合理地控制应用程序域。
定义新的应用程序域
我们可以通过创建新的应用程序域来隔离不同的AS3定义。新的应用程序域可以单独控制加载、卸载以及运行。 代码如下:
var newApplicationDomain:ApplicationDomain = new ApplicationDomain();
var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext(false, newApplicationDomain);
loader.load(new URLRequest("example.swf"), loaderContext);
共享应用程序域
当我们想要跨多个SWF文件或模块使用相同的库或文件时,可以使用共享应用程序域。共享应用程序域可用于在许多SWF文件之间共享类定义。举个例子,假设我们定义了一个MyClass类,并将其加入了共享应用程序域:
var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.load(new URLRequest("example.swf"), loaderContext);
然后,在其他的SWF文件中,我们可以通过以下方式在共享的应用程序域中获得这个类的引用:
var MyClass:Class = ApplicationDomain.currentDomain.getDefinition("MyClass") as Class;
var myClassInstance:* = new MyClass();
总的来说,通过控制类的加载和应用程序域,我们可以更加灵活地管理和优化Flash应用程序的开发和运行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flash cs6类加载和应用程序域有什么作用? - Python技术站