Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 从ActionScript数组中删除所有元素的最佳方法?_Apache Flex_Actionscript 3_Actionscript - Fatal编程技术网

Apache flex 从ActionScript数组中删除所有元素的最佳方法?

Apache flex 从ActionScript数组中删除所有元素的最佳方法?,apache-flex,actionscript-3,actionscript,Apache Flex,Actionscript 3,Actionscript,我正在用Flex/ActionScript编写一个应用程序,其中有许多存储数据的数组类型的类成员变量 我的问题是:清除数组对象的“最佳”方法是什么 我注意到ArrayCollection类有一个函数removeAll(),它可以实现这一点,但基本数组类没有。我考虑过的一些可能性是: 遍历数组,对每个元素调用pop或shift 将数组长度设置为0 将成员变量设置为“新数组()”或“[]” 我想说: myArray = [ ]; 这是显式的、简短的,并且很好地利用了VM的垃圾收集器 您的第一个备

我正在用Flex/ActionScript编写一个应用程序,其中有许多存储数据的数组类型的类成员变量

我的问题是:清除数组对象的“最佳”方法是什么

我注意到ArrayCollection类有一个函数removeAll(),它可以实现这一点,但基本数组类没有。我考虑过的一些可能性是:

  • 遍历数组,对每个元素调用pop或shift
  • 将数组长度设置为0
  • 将成员变量设置为“新数组()”或“[]”
    • 我想说:

      myArray = [ ];
      
      这是显式的、简短的,并且很好地利用了VM的垃圾收集器

      您的第一个备选方案运行大量解释代码以获得相同的结果

      我不知道第二个是你想要的;如果是的话,那就不清楚了


      第三个备选方案的“new Array()”变体非常冗长,与数组文本相比没有任何优势。如果您还编写JS并使用它,您将因未使用数组文本形式而受到指责。

      这取决于您的上下文。虽然使用杨先生的答案通常是最正确的方法,但它并不总是有效的,特别是如果有两个变量指向同一个数组:

      var foo:Array
      var bar:Array
      foo = bar = [ 1, 2, 3 ];
      bar = [];
      trace( foo ); // 1,2,3
      
      另一方面,如果实际手动清空阵列:

      var foo:Array
      var bar:Array
      foo = bar = [ 1, 2, 3 ];
      var l:int = bar.length; // get the length FIRST! 
                              // Otherwise bar.length will change
                              // while you iterate!
      
      for( var i:int = 0; i < l; i++ )
      {
          bar.shift();
      }
      trace( foo ); // does not trace anything
      
      var-foo:Array
      变量栏:数组
      foo=bar=[1,2,3];
      变量l:int=bar.length;//先看长度!
      //否则,bar.length将更改
      //当你迭代的时候!
      对于(变量i:int=0;i
      如果你能修改数组引用,那么我会同意沃伦的答案。如果需要修改现有实例,还可以使用:


      我不敢说,但是Warren Young说设置myArray=[]会导致垃圾收集器拾取数组是错误的

      因为您能够在自身中添加对自身的引用,因此将永远不会被收集并耗尽内存,特别是当阵列中有一些精灵时,因为它们也会让阵列引用它们,并且它们也永远不会被收集

      Sly_cardinal和Richard Szalay是100%正确的。但是Richard的中不需要长度参数

      要完全清除阵列并确保其已被垃圾收集,请执行以下操作:

      myArray.splice(0);
      myArray = null;
      

      根据的说法,最好的方法是设置
      长度=0

      设置长度=0并不像官方的as3 lang ref所提到的那样,不太老套。我个人也使用这种方法。我同意Christopher W.Allen Poole的观点,即您的方法实际上并没有清除数组。myArray.length=0更不清楚,因为它引入了一个不必要的数组描述组件,而所有应该传达给读者的都是“删除数组”。长度设定器的截断功能最初给我的印象是一种额外的好处。无论如何,Christopher W.Allen Poole(cwallenpoole)的响应很有意义,而且似乎更明显,因为“拼接”操作更具字面意义,专门用于删除项。while(bar.length>0)bar.shift();/:)钢筋接头(0);//无需环路:)阵列拼接(0);或更好:arr.length=0;
      myArray.splice(0);
      myArray = null;