2015-01-13 4 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

Я знаю. Я написал в качестве примера. Не заметил, что я начал с Capitals :) – 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).

На данный момент исходные данные, которые использовали для ссылки, не изменились каким-либо образом, вы только что передали, какая переменная относится к нему.

На данный момент, если вы сделали ArrayOld = null, тогда исходные данные в памяти больше не имеют никакой ссылки на него, и в конечном итоге он будет очищен сборкой мусора, но не сразу. Это произойдет «позже» в то время, когда решение во время выполнения будет удобно.

Смежные вопросы