ApplicationDomain和getDefinition
来源:互联网 发布:北风网php 百度云 编辑:程序博客网 时间:2024/04/30 10:33
最近反复阅读kevincao的深入理解Flash的沙箱 – Application Domains 谈谈ActionScript垃圾回收。
结合项目中遇到的一些问题,谈谈体会。
new ApplicationDomain();是新建系统域下子域。ApplicationDomain.currentDomain;是当前程序域。new ApplicationDomain(ApplicationDomain.currentDomain);是新建当前域下的子域。
如果不是用new ApplicationDomain(ApplicationDomain.currentDomain);加载的swf,就算用外部external-library-path方式用swc通过了编译,在使用时也是获得不到定义的。因为父域无法访问子域的定义。
但是kevincao说了。 如果子SWF文件是加载到主应用程序域里的,那么这个文件是不能卸载的(前提是子SWF文件内的类定义没有被主应用程序域里定义所覆盖)。如果子SWF文件是加载到子应用程序域内(Loader的默认方式),那么这个文件是一定能够被卸载的。
所以一般都是把加载的swf放到主应用程序域的子域。这时候,如果是用外部的load类来加载,那每个swf都有一个自己独立的子域。
而用getDefinition获得类必须知道你需要的swf的在哪个域里面,不然会找不到类定义。
可以在load类里面用可以用个关联数组储存当前加载swf的域。方便随时随处getDefinition。就不怕loader已经为null或销毁了。
非当前域getDefinition获得的Class,只能new给Object类型,不然会报错滴。比如这样。var spanishGreeter:Class = spanishGreeterLoader.getClass(“es/Greeter.swf”,”Greeter”);var greeter1:Object = new spanishGreeter();
之后你可以再AS为Sprite之类,但是只有为Object时,用greeter1.foo方式访问类里面的定义时才能通过编译,不然也是会报错滴。
一定要好好理解编译期和运行期的概念。
private var _loadDomain:Object = new Object();public function load(lib:String):void{ swfLib = lib; request = new URLRequest(swfLib); var context:LoaderContext = new LoaderContext(); // context.applicationDomain = ApplicationDomain.currentDomain; context.applicationDomain = new ApplicationDomain(); _loadDomain[swfLib] = context.applicationDomain; loader.load(request, context);}public function getClass(lib:String,className:String):Class{ try { return _loadDomain[lib].getDefinition(className) as Class; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + swfLib); } return null;}
- ApplicationDomain和getDefinition
- ApplicationDomain
- ApplictionDomain getdefinition
- ApplicationDomain详述
- ApplicationDomain学习
- 对于ApplicationDomain的应用
- 转 flash ApplicationDomain应用
- [Flex]Flex的ApplicationDomain
- ApplicationDomain类应用实例
- 对于ApplicationDomain的应用
- Flex的ApplicationDomain
- AS3.0中的ApplicationDomain
- AS3加载swf与ApplicationDomain
- AS3加载swf与ApplicationDomain
- AS3加载swf与ApplicationDomain
- AS3应用程序模块化开发与ApplicationDomain
- AS3应用程序模块化开发与ApplicationDomain
- AS3应用程序模块化开发与ApplicationDomain
- javascrip数组操作方法
- ubuntu 修改启动顺序
- fcntl文件锁
- OC字符串方法总结
- Objective-C语法快速参考
- ApplicationDomain和getDefinition
- Open Wifi SSID Broadcast vulnerability
- c++ 对象切割
- Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
- 傅里叶分析之掐死教程(完整版)
- 安卓android studio配置
- C++ Primer学习 《IO Library》
- web开发中所遇到的状态码
- Flash应用程序域学习笔记