Как удалить целое число (без знака) в ActionScript / Flex 3? - PullRequest
0 голосов
/ 27 июня 2009

У меня есть класс, который вызывается несколько раз. Когда приложение переходит на следующий этап, все они должны быть выгружены. Из-за этого я создал метод unload () в классе.

Проблема в том, что я не могу установить переменную uint "charId" в null, чтобы "сбросить" ее. Команда «delete» невозможна, так как она применима только для динамических переменных или чего-то подобного.

Теперь мне интересно, как я должен сбросить эту переменную, чтобы ее память была перераспределена позже?

Метод выгрузки класса:

public function unload():void
        {
            trace("Unloading character with charname '" + charName + "'.");
            enterButton.removeEventListener(MouseEvent.CLICK, enterClicked);
            removeChild(enterButton);
            enterButton = null;
            charName = null;
            charId = null; //this is possible but not recommended - what's a better way?
            lobbyInterface = null;
        }

Так что да, это практически возможно, так как это меняет тип переменной - однако это не рекомендуется и выдает предупреждение. Итак, как лучше это сделать?

Обратите внимание, что этот объект также выгружен в родительском объекте. Это также освобождает все эти переменные из памяти?

1 Ответ

1 голос
/ 27 июня 2009

uint, int, Number и Boolean не обнуляются в AS3. Число может быть NaN, но это действительно лучшее, что вы можете получить. int и uint всегда просто 32-битные, поэтому вы не можете вставить туда нулевую ссылку.

Тип очистки, которую вы пытаетесь выполнить, не может быть выполнен, поскольку в AS3 есть концепция закрытых классов. Запечатанный класс имеет фиксированный размер в памяти. Когда дело доходит до переменных экземпляра, думайте об этом как о C struct, вы можете только сбросить все или ничего. Конечно, в C вы можете делать все, что угодно, это фиксированный блок в памяти, объект по одной ссылке на переменную.

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

Вам не нужно выполнять такую ​​очистку, так как Flash имеет сборку мусора, как и большинство сред выполнения в настоящее время. Он также имеет дело с вложенными и циклическими ссылками, единственное, в чем вы должны быть уверены, это то, что вы удаляете любые «внешние» ссылки на этот класс. Вещи, которые обычно не собираются, - это объекты в списке отображения, таймеры и интервалы выполнения, а также вещи, связанные с вводом / выводом. Как только у вас появится цепочка ссылок к вашему объекту, она не будет собрана.

Допустим, у вас есть object A с обработчиком событий для перемещения мыши по объекту в некотором списке, ссылаясь на object B. B не будет собираться, но как только не будет цепочки, ведущей к объекту, она будет собрана (рано или поздно GC будет довольно ленивым. Но чем больше памяти вы используете, тем больше она выполняет свою работу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...