【问题标题】:Is it sensible to use AS3 Vectors for class instances?将 AS3 向量用于类实例是否明智?
【发布时间】:2013-01-14 08:39:58
【问题描述】:

这是一个简单的代码:

var a:Array = new Array( ins0, ins1, ins2, ins3,...., ins10000) ;
findIns( ins1500) ;

function findIns( ins:SomeInstance ) {  
    for ( var i = 0 ; i< a.length ; i++)  {
        if ( a[i] == ins ) {
            trace ( "FOUND IT");
            break; 
        }
    }
}

在上面的代码中没有“int”或“string”。它们是一些复杂类的实例。那么在这种情况下使用向量代替数组是否明智。

在我看来这应该是明智的,因为实例毕竟是“数字内存位置”?

【问题讨论】:

    标签: arrays performance actionscript-3 vector


    【解决方案1】:

    如果数组的内容都是同一个类的实例,那么Vector肯定会比Array表现更好。

    有关详细信息,请参阅文档:

    • 性能:使用 Vector 实例时数组元素的访问和迭代比使用 Array 时快得多。

    • 类型安全:在严格模式下,编译器可以识别数据类型错误。数据类型错误的示例包括将不正确数据类型的值分配给 Vector 或在从 Vector 读取值时期望错误的数据类型。但是请注意,当使用 push() 方法或 unshift() 方法向 Vector 添加值时,不会在编译时检查参数的数据类型。相反,它们会在运行时进行检查。

    • 可靠性:运行时范围检查(或固定长度检查)显着提高了数组的可靠性。

    http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Vector.html

    【讨论】:

    • 这个答案其实是错误的。向量 only 在它是数字类型向量时表现更好。 Object 的任何子类型的向量实际上都比 Array 慢。请参阅我对这个问题的回答:stackoverflow.com/questions/8551527/as3-vector-of-arrays/… 以获得解释。
    • 尽管如此,您所说的关于可靠性和类型安全的内容确实适用 - 如果您澄清性能声明,我很乐意删除反对票。 ;)
    【解决方案2】:

    是的,你是对的。存储在向量中的是对对象的引用,而不是对象本身。您可以检查是否执行以下操作:

    var ref:yourType = a[0];
    a[0] = someOtherObjectInstance;
    trace(ref.toString());
    

    你会发现ref 仍然指向你原来的对象。

    【讨论】:

      猜你喜欢
      • 2010-10-13
      • 2010-09-30
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多