я сразу прошу не ругаться, если Вам покажется, что ответ написан в хелпе и так очевиден, когда ты уже его знаешь...
В хелпе написано -
Цитата:
|
Предписывает объекту Dictionary использовать в ключах объектов «слабые» ссылки. Если единственная ссылка на объект находится в указанном объекте Dictionary, ключ подходит для очистки и при удалении объекта удаляется из таблицы.
|
и если я правильно понимаю, то при удалении _sprite обьект _key должен удаляться из памяти.
Чтобы убедиться точно, я пробовал удалять ключ, в надежде, что удалится обьект из словаря.
Но и в том и в другом случаи, в памяти весят оба обьекта.
Как сделать, чтобы удаление было настоящим и что именно удаляется само, когда что то удалить руками?

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.Dictionary;
public class Main extends Sprite
{
private var _dictionary:Dictionary;
private var _key:Sprite;
private var _sprite:Sprite;
public function Main()
{
_dictionary = new Dictionary(true);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
_key = new Sprite();
_sprite = new Sprite();
_dictionary[_key] = _sprite;
}
private function mouseDownHandler(event:MouseEvent):void
{
_dictionary[_key] = null;
trace(_dictionary[_key]);
}
}
}
Даже если сделать вот так, то ключ все равно не удаляется ( точнее сказать, что то одно не удаляется ).

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.Dictionary;
public class Main extends Sprite
{
private var _dictionary:Dictionary;
public function Main()
{
_dictionary = new Dictionary(true);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
addDictionary(new Sprite(), new Sprite());
}
private function addDictionary(key:Sprite, sprite:Sprite):void
{
_dictionary[key] = sprite;
}
private function removeDictionary(key:Sprite):void
{
_dictionary[key] = null;
trace(_dictionary[key]);
}
private function mouseDownHandler(event:MouseEvent):void
{
removeDictionary(new Sprite());
}
}
}