Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Event.SELECT未为Flex 3中的局部变量触发_Apache Flex_Flex3_Flexbuilder - Fatal编程技术网

Apache flex Event.SELECT未为Flex 3中的局部变量触发

Apache flex Event.SELECT未为Flex 3中的局部变量触发,apache-flex,flex3,flexbuilder,Apache Flex,Flex3,Flexbuilder,我在Flex3中制作了一个简单的应用程序。代码如下 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ private function browseFile():void {

我在Flex3中制作了一个简单的应用程序。代码如下

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
    <![CDATA[

        private function browseFile():void
        {
            var fr:FileReference  = new FileReference();
            fr.addEventListener(Event.SELECT, onFileSelect);
            fr.browse();
        }

        private function onFileSelect(evt:Event):void
        {
            trace(evt.currentTarget);
        }


    ]]>
</mx:Script>
    <mx:Button click="browseFile()" />
</mx:Application>
情况就是这样。选择“永不被解雇”。但是如果我使用FileReference globali.e的fr引用。在任何函数外部声明它时,将触发Event.SELECT。 请注意,这只发生在Flex3中。在Flex4中,它在这两种情况下都可以正常工作。
它是否与Actionscript中的垃圾收集机制有关?谁能解释一下吗?我只是想知道原因。

是的,这一切都与垃圾收集有关。由于fr FileReference变量是在函数browseFile中声明的,因此该变量仅存在于函数中。因此,一旦函数完成执行,它就有资格被垃圾收集


它似乎在Flex4中工作这一事实有点奇怪,但请记住,垃圾收集是按照Flash的时间表进行的。因此,在Flex4中,它可能不会立即进行垃圾收集,或者Flex4应用程序使用的内存稍少,所以垃圾收集不会那么快发生。这也可能是Flex 4中的一个错误,因为某些东西保留了对FileReference对象的引用,从而防止它被垃圾收集。

如果您以与此处使用FileReference相同的方式使用Loader或URLLoader,则Event.COMPLETE会被正确激发。那么为什么只有FileReference会发生这种情况呢?正如我提到的,Flash会在需要时进行垃圾收集。另一个可能的罪魁祸首是代码中或Flash Player本身中的某些内容保留了对该对象的引用。Flash用于垃圾收集的方法之一是引用计数。如果其他对象碰巧引用了该对象,则不会对其进行垃圾收集。确认发生了什么的最好方法是使用探查器,它可以显示哪些对象引用了其他对象。我见过这样的场景,有时这种代码可以工作,有时却不能。