Архивация

Архивация является процессом преобразования группы связанных объектов к форме, которая может быть сохранена или передана между приложениями. Конечный результат архивации — архив — является потоком байтов, записывающим идентификационные данные объектов, их инкапсулированных значений и их отношений с другими объектами. Разархивирование, обратный процесс, берет архив и перераспределяет идентичную сеть объектов.

Основное значение архивации - то, что она обеспечивает универсальный способ сделать объекты персистентными. Вместо того, чтобы выписать данные объектов в специальном формате файла, приложения часто хранят свои объекты модели в архивах, которые они могут выписать как файлы. Приложение может также передать сеть объектов — обычно известный как граф объектов — к другой архивации использования приложения. Приложения часто делают это для операций области монтажа, таких как копия и вставка.

Archiving

Для его экземпляров, которые будут включены в архив, класс должен принять NSCoding протокол и реализация требуемые методы для кодирования и декодирования объектов. Архивы какао могут содержать объекты Objective C, скалярные значения, C массивы, структуры и строки. Архивы хранят типы объектов вместе с инкапсулированными данными, таким образом, объект, декодируемый от потока байтов, имеет тот же класс как объект, первоначально закодированный в поток.

Включенный и последовательный Archivers

Платформа Основы обеспечивает два набора классов для архивации и разархивирования сетей объектов. Они включают методы для инициирования архивации и разархивирования процессов и для кодирования и декодирования данных экземпляра Ваших объектов. Объекты этих классов иногда упоминаются как archivers и unarchivers.

  • Включенный archivers и unarchivers (NSKeyedArchiver и NSKeyedUnarchiver). Эти объекты используют строковые ключи в качестве идентификаторов данных, которые будут кодироваться и декодироваться. Они - предпочтительные объекты для архивации и разархивирования объектов, особенно с новыми приложениями.

  • Последовательный archivers и unarchivers (NSArchiver и NSUnarchiver). Этот archiver «старого стиля» кодирует объектное состояние в определенном порядке; unarchiver ожидает декодировать объектное состояние в том же порядке. Их надлежащее использование для устаревшего кода; новые приложения должны использовать включенные архивы вместо этого.

Создание и декодирование включенных архивов

Приложение создает архив путем вызова archiveRootObject:toFile: метод класса NSKeyedArchiver. Первый параметр этого метода берет ссылку на корневой объект графа объектов. Начиная с этого корневого объекта, каждого объекта в графике, соответствующем NSCoding протоколу дают возможность закодировать себя в архив. Получающийся поток байтов записан в указанный файл.

Декодирование архива продолжается в противоположном направлении. Приложение вызывает NSKeyedUnarchiver метод класса unarchiveObjectWithFile:. Учитывая архивный файл, метод воссоздает граф объектов, прося, чтобы класс каждого объекта в графике декодировал соответствующие данные в потоке байтов и воссоздал объект. Метод заканчивается путем возврата ссылки на корневой объект.

NSKeyedArchiver методы класса archivedDataWithRootObject: и unarchiveObjectWithData: эквивалентны вышеупомянутым методам, кроме они работают с объектом данных, а не файлом.