• getDefinitionByName与ApplicationDomain.getDefinition


    SWF用于运行时加载,而SWC在编译时用做外部库
    1. ApplicationDomain.currentDomain.getDefinition方法获取不在应用程序域内的定义,或者被父域覆盖的定义。这个方法返回应用程序域及其任意父域内的定义引用
    2.也可以用SWF的LoaderInfo.applicationDomain来获得在ApplicationDomain.currentDomain以外的应用程序域
    3.在当前应用程序域内使用ApplicationDomain.currentDomain.getDefinition方法的效果等同于全局函数getDefinitionByName

    var name:String = getQualifiedClassName(e.target.content)

    getDefinitionByName(name)

    loader.contentLoaderInfo.applicationDomain.getDefinition("class")

    getDefinition:

    getDefinitionByName反射自定义类时发现一直报错(未找到相应类),发现问题是出在as的编译机制即“如果一个类在程序中完全没有引用过,那么这个类就不会编译到文件中(即便已经导入了也一样)。”解决办法只需初始一个自定义类类型的变量。var a:Class;

    定义的继承和类继承有点类似,两者都是子级可以访问父级的定义,而反之则不行。

    应用程序域的继承不允许子级覆盖父级的定义。如果子域中包含有与父域一样的定义(指的是完全限定名称一致,包括包路径)

    那么父域中的定义会取代掉子域

    var name:String = getQualifiedClassName(evt.currentTarget.content).replace("::",".")

     载入swf是方法

    public function getClassByName(cla:String):Class{
        var mc:Class = getDefinitionByName(cla) as Class;
        return mc;
    }

    1.默认的加入父应用域的子域 new ApplicationDomain(ApplicationDomain.currentDomain)

    则在父域使用getDefinitionByName('swf中的类')访问,则出现子类名未定义错误

    解决方法:子类是定义个返回getDefinitionByName()方法,父域载入swf时,使用(e.target.content).fun(),获得Class

    2.加入当前应用域 ApplicationDomain.currentDomain

    共享域的内容,父类与子类都能访问

    3. 当前系统应用域新建一个应用域 new ApplicationDomain(null)

    通过子类定义方法可以获取Class,当不能对e.target.content进行强转

    则出现:TypeError: Error #1034: 强制转换类型失败:无法将 sub::B@5efb041 转换为 sub.B。

    ApplicationDomain:

    var context:LoaderContext = new LoaderContext();
    context.applicationDomain = new ApplicationDomain(Application.currentDomain);
     
    if(ApplicationDomain.currentDomain.hasDefinition('sub.B')){ //当载入共享域或使用SWC
        bclass = ApplicationDomain.currentDomain.getDefinition('sub.B'as Class;
    }else if(_loader.contentLoaderInfo.applicationDomain.hasDefinition("sub.B")){ //新建域,父域的子域
        bclass = _loader.contentLoaderInfo.applicationDomain.getDefinition('sub.B'as Class;
    }else{
        trace("出错了。。。")
    }

     使用SWC库,只有当类实例化new class()后才编译入主程序中

  • 相关阅读:
    HTML标签和属性三
    HTML标签和属性二
    HTML标签和属性一
    小程序相关面试题
    Vue路由的hash模式与history模式的区别?
    android中VideoView播放sd卡上面的视频
    Android中app开机自启动的开发
    java中byte,byte[]和int之间的转换
    Android多activity启动两种方式浅谈
    Android开发用到的几种常用设计模式浅谈(一):组合模式
  • 原文地址:https://www.cnblogs.com/xcai/p/2468348.html
Copyright © 2020-2023  润新知