В моем приложении используется словарь
protected _categoryToValueDict:Dictionary = new Dictionary();
чтобы сопоставить что-то еще.
Теперь, в какой-то момент в приложении, мне нужно удалить определенный ключ из 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 operator]
delete( _categoryToValueDict[ cat ] );
само приложение не бросает ошибки в нормальном режиме. Но как только я сериализую свою внешнюю структуру данных во внешний источник [в настоящее время SharedObject], приложение не может де-сериализовать позже.
Если я использую приведенную выше кодированную операцию синтаксического удаления , операция де-сериализации работает как ожидалось, и модель появится в приложении.
Альтернатива должна быть идентичной. Не так ли?
Итак, мой вопрос: какая разница между двумя альтернативами?
PS: Этот вопрос может быть связан с моим предыдущим.
ОБНОВЛЕНИЕ-1
Adobe объясняет эту страницу:
Чтобы объект, на который ссылается myObject, имеет право на сбор мусора, вы должны удалить все ссылки на него. В этом случае вы должны изменить значение myObject и удалить ключ myObject из myMap, как показано в следующем коде:
myObject = null;
delete myMap[myObject];
Предположим, что это опечатка. Не следует ли читать это так:
delete myMap[myObject];
myObject = null;
Зачем передавать нулевой указатель на myMap в качестве ключа?