В моем приложении используется словарь
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 в качестве ключа?