Actionscript 3 SkinnablePopUpContainer未销毁

Actionscript 3 SkinnablePopUpContainer未销毁,actionscript-3,apache-flex,mobile,flex4,flex4.5,Actionscript 3,Apache Flex,Mobile,Flex4,Flex4.5,我正在监视我的internet连接。当没有可用的服务时,我会从URLMonitor获取一个事件。我正在侦听此事件并调用打开SkinnablePopUpContainer的函数。这是一个非常简单的组件,我没有附加到它的侦听器,它只在函数内部定义。当用户单击SkinnablePopUpContainer中的按钮时,我关闭该组件,并尝试使用我所知道的所有可能的方法销毁它。当我从Flash Builder中检查探查器工具时,SkinnablePopUpContainer仍然存在。如何销毁此组件以释放它正

我正在监视我的internet连接。当没有可用的服务时,我会从URLMonitor获取一个事件。我正在侦听此事件并调用打开SkinnablePopUpContainer的函数。这是一个非常简单的组件,我没有附加到它的侦听器,它只在函数内部定义。当用户单击SkinnablePopUpContainer中的按钮时,我关闭该组件,并尝试使用我所知道的所有可能的方法销毁它。当我从Flash Builder中检查探查器工具时,SkinnablePopUpContainer仍然存在。如何销毁此组件以释放它正在使用的内存

以下是侦听器函数:

        protected function onNoServiceAvailable(e:*):void
        {
            var noserviceWindow:NoInternetError = new NoInternetError();
            noserviceWindow.open(this,false);       
            noserviceWindow.x= 0;
            noserviceWindow.y= 0;
            noserviceWindow.width = SharedObject.getLocal('localObj').data.appMeasures.appWidth;
            noserviceWindow.height = SharedObject.getLocal('localObj').data.appMeasures.appHeight+200;
        }
这是我的SkinnablePopUpContainer

<?xml version="1.0" encoding="utf-8"?>
<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:nxTextInput="nx.components.extended.nxTextInput.*"
         xmlns:nxButton="nx.components.extended.nxButton.*"
         backgroundAlpha="0.4"
         horizontalCenter="0" verticalCenter="0"  width="100%" height="100%"> 
    <fx:Script>
    <![CDATA[

        protected function loginButton_clickHandler(event:Event):void
        {
            loginButton.removeEventListener(MouseEvent.CLICK,loginButton_clickHandler);
            this.close();
            var ob = this;
            ob = null;
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Panel title="Fehler" 
         horizontalCenter="0" verticalCenter="0"  color="white">
    <s:VGroup horizontalAlign="center" verticalAlign="middle" gap="20"
              height="100%" width="100%">
        <s:BitmapImage source="@Embed('assets/nxInspect/mobile/assetsCI/redAssets/alert_80x80.png')"  id="iconBitmpapDownOnline" verticalCenter="0" />
        <s:Label id="serviceFailure" text="Keine internetverbindung." width="90%" styleName="interactable" textAlign="center" color="white"/>
        <nxButton:NxButton id="loginButton" label="OK" width="100%" height="100" click="loginButton_clickHandler(event)" styleName="alert"/>
    </s:VGroup>

</s:Panel>


首先,行var ob=this;只需创建一个“this”的引用变量。将此变量设置为null不会使其删除自身。它只会再次将您刚刚创建的变量引用为null,因此这两行代码是无用的


因为您已经将局部变量noserviceWindow包含在函数onNoServiceAvailable的范围内,所以当没有更多引用时,应该自动将其标记为垃圾回收。如果您的探查器正在识别它的存在,那么在代码中的某个地方可能还有另一个对它的引用。

探查器(在Flash Builder中)有一种显示“游荡对象”的方法,从对象列表中,您可以看到每个对象的“gc_根”是什么。“gc_根”(“垃圾收集根”或类似名称)是将对象固定在内存中的东西。现在,我猜人们使用AdobeScout,也许它也有类似的功能?另外,请注意,Flex框架(过去)本身可能会导致内存泄漏,b/c框架的某些部分保留了对对象的引用。到目前为止,大多数问题已经得到解决。。。在您的情况下,我可能会怀疑
PopupManager
类,或者弹出窗口中的嵌入图像、任何数据绑定、资源包的使用等。