Сериализация списков свойств
Сериализация преобразовывает типы 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 |
} |