Архивация
Архивация является процессом преобразования группы связанных объектов к форме, которая может быть сохранена или передана между приложениями. Конечный результат архивации — архив — является потоком байтов, записывающим идентификационные данные объектов, их инкапсулированных значений и их отношений с другими объектами. Разархивирование, обратный процесс, берет архив и перераспределяет идентичную сеть объектов.
Основное значение архивации - то, что она обеспечивает универсальный способ сделать объекты персистентными. Вместо того, чтобы выписать данные объектов в специальном формате файла, приложения часто хранят свои объекты модели в архивах, которые они могут выписать как файлы. Приложение может также передать сеть объектов — обычно известный как граф объектов — к другой архивации использования приложения. Приложения часто делают это для операций области монтажа, таких как копия и вставка.
Для его экземпляров, которые будут включены в архив, класс должен принять 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:
эквивалентны вышеупомянутым методам, кроме они работают с объектом данных, а не файлом.