2013-01-14 18 views
1

下面是一个简单的代码:对类实例使用AS3矢量是否明智?

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; 
     } 
    } 
} 

在上面的代码中没有“内部”或“串”。它们是一些复杂类的实例。因此,在这种情况下,使用Vectors来代替数组是明智的。

在我看来,它应该是明智的,因为实例是“数值存储位置”的后续?

回答

1

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

见文档的详细信息:

  • 性能:数组元素访问和迭代的更快使用阵列时使用Vector实例时比。

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

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

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

+0

这个答案其实是错误的。 Vector ** only **当它是一个数字类型的矢量时表现更好。 Object的任何子类型的矢量实际上比'Array'慢。看到我对这个问题的回答:http://stackoverflow.com/questions/8551527/as3-vector-of-arrays/8551727#8551727的解释。 – weltraumpirat

+0

尽管如此,您对可靠性和类型安全性的看法确实适用 - 如果您澄清性能声明,我会很乐意取消该投票。 ;) – weltraumpirat

1

是的,你是对的。向量中存储的内容是对象的引用,而不是对象本身。您可以检查以下内容:

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

您会发现ref仍指向您的原始对象。