Сериализация списков свойств

Сериализация преобразовывает типы Objective C в и от архитектурно-независимого потока байтов. В отличие от архивации, основная сериализация не записывает тип данных значений, ни отношений между ними; только сами значения зарегистрированы. Это - Ваша ответственность десериализовать данные в надлежащем порядке.

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

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

Поскольку сериализация не сохраняет информацию о классе или переменчивость, ни обрабатывает многократные ссылки, кодируя (как реализовано NSCoder и его подклассы), предпочтительный способ сделать графы объектов персистентными.

NSPropertyListSerialization класс обеспечивает методы сериализации, преобразовывающие объекты списка свойств в и или от XML или от оптимизированного двоичного формата. NSPropertyListSerialization объект класса обеспечивает интерфейс для процесса сериализации; Вы не создаете экземпляры NSPropertyListSerialization.

Следующий пример кода показывает, как сериализировать простой список свойств в формат XML.

NSDictionary *propertyList= @{ @"FirstNameKey" : @"Edmund",
                               @"LastNameKey" : @"Blackadder" };
NSString *errorStr;
NSData *dataRep = [NSPropertyListSerialization dataFromPropertyList:propertyList
                format:NSPropertyListXMLFormat_v1_0
                errorDescription:&errorStr];
if (!dataRep) {
    // Handle error
}

Следующий пример кода преобразовывает данные XML из вышеупомянутого назад в граф объектов.

NSDictionary *propertyList = [NSPropertyListSerialization propertyListFromData:dataRep
                mutabilityOption:NSPropertyListImmutable
                format:NULL
                errorDescription:&errorStr];
if (!propertyList) {
    // Handle error
}