2015-01-13 53 views
0

我有一个与内存有关的问题。我会举一个例子来说明现在如何运作。数组,对象,内存。 Actionscript

我有2个数组:

var ArrayNew:Array = new Array(); 
var ArrayOld:Array = new Array(); 

还我一个类来存储我的对象(3个属性)。例如:

public Id {get; set;} 
public Name {get; set;} 
public Type {get; set;} 

的事情是,我是填充ArrayNew与新对象每次(例如12小时):

ArrayNew.push(x, x, x) 
..... 
ArrayNew.push(x, x, x) 

这可能是约200〜记录,甚至更多。 之后,我做出这样的:

ArrayOld = ArrayNew; 
ArrayNew = null; 

所以事情是,记忆是如何工作在这种情况下,并与对象发生了什么? ArrayOld = ArrayNew创建对象的副本(因为它现在起作用)? ArrayNew = null删除创建的对象吗? 我希望你不要这种情况。 :)

回答

1

如果没有其他引用,则存储在arrayOld中的对象将被垃圾回收。 arrayNew中的数据不会被复制 - 在赋值后它们将被arrayOld引用。

这是说,经过:

arrayNew[0].name = 'a random silly text'; 
arrayOld = arrayNew; 
arrayOld[0].name = 'another silly string'; 
trace(arrayNew[0]); 

你会得到:

another silly string 

样式注意:通常你不首都启动变量/对象名称,它保留为类。

+0

我知道。我只是写了一个例子。没有事件发现我开始与首都:) – CikLinas

1

如果我正确理解你,你想知道ArrayOld发生了什么。

我的代码:

var arr_1:Array = ["Hello world!"]; 
 
var arr_2:Array = ["My name is Stas!"]; 
 

 
arr_2 = arr_1; 
 
arr_1 = null; 
 

 
trace(arr_2);// Hello world!

如果我提出这个问题的理解是错误不正确的解释。

0

ArrayOld = ArrayNew只是简单地使ArrayOld在这一点上与ArrayNew相同。内存中的实际数据不会被复制。

ArrayNew = null只是将空值分配给ArrayNew参考。它不会删除先前引用的数据ArrayNew,也不会影响对该数据的其他引用(如ArrayOld)。

此时,ArrayNew用来引用的原始数据没有任何变化,您刚刚交出了指向它的变量。

此时如果你做了ArrayOld = null,那么内存中的原始数据不再有任何引用,它最终将被垃圾回收清除,但不是马上。它会在运行时决定的“方便”之后“稍后”发生。