Графы объектов

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

Даже с очень немногими объектами, граф объектов приложения становится очень запутанным с циклическими ссылками и многократными ссылками к отдельным объектам. Рисунок 1 показывает неполный граф объектов для простого приложения Какао в OS X. (Еще много соединений существуют, чем показано в этом числе.) Рассматривают часть иерархии представления окна графа объектов. Эта иерархия описана каждым представлением, содержащим список всех его непосредственных подпредставлений. Однако представления также имеют ссылки друг к другу для описания цепочки респондента и цикла клавиатурного фокуса. Представления также соединяются с другими объектами в приложении для сообщений целевого действия, контекстных меню, и многое другое.

Рисунок 1  Частичный граф объектов приложения
Partial object graph of an application

Существуют ситуации, где можно хотеть преобразовать граф объектов, обычно просто раздел полного графа объектов в приложении, в форму, которая может быть сохранена к файлу или передана к другому процессу или машине и затем восстановлена. Файлы пера и списки свойств являются двумя примерами в OS X, где графы объектов сохраняются к файлу. Файлы пера являются архивами, представляющими сложные отношения в пользовательском интерфейсе, такие как иерархия представления окна. Списки свойств являются сериализацией, хранящей простое иерархическое отношение основных объектов значения. Больше подробных данных об архивах и сериализации, и как можно использовать их, описано в следующих разделах.

Архивы

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

Ваше приложение может использовать архив в качестве носителя Вашей модели данных. Вместо того, чтобы разработать (и поддержать) специальный формат файла для Ваших данных, можно эффективно использовать инфраструктуру архивирования Какао и хранить объекты непосредственно в архив.

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

Вся Основа оценивает объекты объектов (NSString, NSArray, NSNumber, и т.д.), и большая часть Набора Приложения и объектов пользовательского интерфейса UIKit принимают NSCoding и может быть помещен в архив. Справочный документ каждого класса идентифицирует, принимают ли они NSCoding.

Сериализация

Сериализация хранит простую иерархию объектов значения, таких как словари, массивы, строки и двоичные данные. Сериализация только сохраняет значения объектов и их позиции в иерархии. Многократные ссылки на тот же объект значения могли бы привести к многократным объектам, когда десериализовано. Переменчивость объектов не сохраняется.

Списки свойств являются примерами сериализации. Атрибуты приложения ( Info.plist файл), и пользовательские настройки сохранены как списки свойств.