Почему не работает delete( DictionaryInstance[ key ] );?

В моем приложении используется словарь

protected _categoryToValueDict:Dictionary = new Dictionary();

для сопоставления чего-то с чем-то другим.

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

Я реализовал этот простой метод:

    public function setCategoryNoValue( cat:TAModelCategory ):void {

        // delete( _categoryToValueDict[ cat ] );

        var old:Dictionary = _categoryToValueDict;

        _categoryToValueDict = new Dictionary();

        for ( var key:* in old ) {

            if ( key != cat ) {
                _categoryToValueDict[ key ] = old[ key ];
            }
        }

    }

Если я использую только [описание оператора delete]

delete( _categoryToValueDict[ cat ] );

то само приложение не выдает ошибок в обычном режиме. Но как только я сериализую его внешнюю структуру данных во внешний источник [в настоящее время SharedObject], приложение не может де-сериализовать ее позже.

Если я использую приведенную выше кодированную операцию ручного итеративного удаления, операция де-сериализации работает как ожидалось и модель появляется в приложении.

Альтернатива должна быть идентичной. Не так ли?

Итак, мой вопрос: В чем разница между двумя альтернативами?

PS: Этот вопрос может быть связан с моим предыдущим.

UPDATE-1

Adobe объясняет на этой странице:


Чтобы сделать объект, на который ссылается myObject, пригодным для сборки мусора, вы должны удалить все ссылки на него. В этом случае необходимо изменить значение myObject и удалить ключ myObject из myMap, как показано в следующем коде:

myObject = null;
delete myMap[myObject];

Предполагаю, что это опечатка. Не следует ли читать так:

delete myMap[myObject];
myObject = null;

Зачем передавать null-pointer в myMap в качестве ключа?

11
задан Community 23 May 2017 в 12:00
поделиться