обнулить ссылку на объект или пространство в памяти - PullRequest
1 голос
/ 12 января 2010

Это может быть глупый вопрос. Я думаю, что я уже знаю ответ, просто уточнить. Если вы объявляете объект в varible1, а затем передаете значение в varible2. Если вы решите установить нулевое значение varible2, это уничтожит только ссылку или сам объект. Я хочу сказать нет, но опять же, все, что вы делаете для ссылки на себя, также влияет на пространство в памяти.

это 2 переменные в моем классе.

private var objects:Array;
private var viewableObjects:Array;

выше - переменные класса. Позже в моем коде я добавляю объект в массив объектов

objects[0][4] = new Enemy1();

Когда я отслеживаю, я получаю следующее

[object Enemy1]

Затем я добавляю его в массив видимых объектов

viewableObjects.push(objects[0]);

затем я удаляю это. это позже по линии. Я перебираю код, который мой, вы видите «i» в первом элементе.

viewableObjects[i][4] = null;

и когда я отслеживаю те же самые первые переменные "объекты [0] [4]" ... это показывает

null

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Установка ссылки на null не влияет на объект, за исключением случаев, когда это последняя ссылка на этот объект (в этом случае он дает право на сборку мусора)

Возможно, вы захотите прочитать больше о том, как работают ссылки.

1 голос
/ 12 января 2010

Эй, это определенно может немного сбить с толку, но это одна из тех вещей, которую вы действительно должны понять, поэтому стоит спросить.

В вашей ситуации, обнуление переменной 2 удаляет только ссылку, используемая память останется прежней (почти ссылка занимает совсем немного), вы только что уменьшили количество ссылок. Он не будет очищен до тех пор, пока не будут удалены все ссылки или все ссылки изолированы и не используются в приложении. то есть: единственный объект, ссылающийся на него, доступен для сборки мусора.

...