Я бы удалил ключ в качестве лучшей практики:
dictionary[sprite] = null;
delete dictionary[sprite];
Обратите внимание, что слабые ключи указывают, что ключ пригоден для сборки мусора и удаляется из таблицы, когда объект собирается. Маловероятно, что сборка мусора будет происходить непосредственно в вашей функции.
Словарь никогда не удалит слабые строковые ключи из таблицы.
Существует несколько известных проблем, связанных с методами, такими как ключи и сериализация AMF.
Вам нужно выделить немного памяти для запуска сборки мусора.
Используя ваш пример, я создал 1500 спрайтов, и ключ был удален за 4 кадра:
Выход:
ноль
Отказ коллекции
Отказ коллекции
Отказ коллекции
Коллекция Успех.
Пример кода:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.Dictionary;
public class Test extends Sprite
{
public var dictionary:Dictionary = new Dictionary(true);
public function Test()
{
addEventListener(Event.ENTER_FRAME, collectionTest);
var sprite:Sprite = new Sprite();
dictionary[sprite] = true;
sprite = null;
trace(sprite); //traces null
}
protected function collectionTest(event:Event):void
{
var cleared:Boolean = true;
for each (var key:* in dictionary)
{
cleared = false;
}
if (cleared)
trace("Collection Success.");
else
trace("Collection Failure");
for(var i:uint = 0; i < 500; i++)
{
new Sprite();
}
}
}
}