作者:ComingX
转自:http://www.comingx.com/?p=1053
对ArrayCollection进行赋值时如果使用“=”赋值,那么=两边的变量将指向同一个内存空间,其中一个改变另外一个跟着改变,类似指针。
1 var a:ArrayCollection = new ArrayCollection( [ 2 {name:"myName",gender:"male"}, 3 {name:"yourName",gender:"female"} 4 ]); 5 var b:ArrayCollection = a; 6 b.addItem({name:"hisName",gender:"male"}); 7 //a的值会跟着b的改变而改变,a,b始终一样
如果你需要做一个ArrayCollection的复制,而不想让两个变量保持关联,你可以使用深度复制
第一种方法:
1 b:ArrayCollection = new ArrayCollection(); 2 for each(var obj:Object in a){ 3 b.addItem(obj); 4 }
第二种方法:
1 public static function cloneObject(obj:Object):*{ 2 var ba:ByteArray = new ByteArray(); 3 ba.writeObject(obj); 4 ba.position = 0; 5 return ba.readObject(); 6 }