Я создал класс , который я использовал в качестве хранилища для всех списков в моих приложениях. Этот класс позволяет мне «подписать» объект на листинг (который можно создать на лету с помощью метода sign()
следующим образом):
manager.sign(myObject, "someList");
При этом сохраняется индекс элемента (с использованием его уникального идентификатора) во вновь созданном или ранее созданном списке «someList», а также объект в 2D-массиве. Так, например, я мог бы закончить с этим:
trace(_indexes["someList"][objectId]); // 0 - the object is the first in this list
trace(_instances["someList"]); // [object MyObject]
В классе есть еще два метода:
find(signature:String):Array
Этот метод возвращает массив через slice()
, содержащий все элементы, подписанные данной подписью.
findFirst(signature:String):Object
Этот метод просто возвращает первый объект в данном листинге
Итак, чтобы получить myObject, я могу пойти:
trace(find("someList")[0]);
or
trace(findFirst("someList"));
Наконец, есть функция unsign()
, которая удалит объект из указанного списка. Эта функция в основном:
- Сохраняет результат
pop()
в указанном листинге для переменной.
- Использует сохраненный индекс для быстрой замены указанного объекта элементом
pop()
.
- Удаляет сохраненный индекс для указанного объекта и обновляет индекс для
pop()
'd элемента.
При всем этом использование unsign()
очень быстро удалит объект из списка любого размера.
Теперь все это хорошо, но у меня были некоторые мысли, которые заставляют меня задуматься, насколько это хорошо на самом деле? Я имею в виду, что возможность легко перечислять, удалять и получать доступ к спискам всего, что я хочу во всем приложении, как это здорово, но есть ли ловушка?
У меня возникла пара начальных мыслей:
- До сих пор я не реализовал поддержку списков, которые являются частными и доступны только через данный класс.
- Память - кажется, это не очень эффективно для памяти. С другой стороны, ни один не создает массивы для всего, что я хочу хранить отдельно. Просто кажется .. Больше .. Как-то.
Есть идеи?
Я загрузил класс здесь, если приведенное выше не имеет особого смысла: https://projectavian.com/AviManager.as