О списках свойств

Список свойств является представлением структурированных данных, используемым Какао и Базовой Основой как удобный способ сохранить, организовать, и получить доступ к стандартным типам данных. Это в разговорной речи упоминается как «plist». Списки свойств используются экстенсивно приложениями и другим программным обеспечением на OS X и iOS. Например, Средство поиска OS X — через пакеты — использует списки свойств, чтобы хранить атрибуты каталога и файл. Приложения на iOS используют списки свойств в своем пакете Настроек для определения списка опций, выведенных на экран пользователям. Этот раздел объясняет, что списки свойств и когда необходимо использовать их.

Что такое Список свойств?

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

От основной абстракции получает и статическое представление данных списка свойств и представление во время выполнения списка свойств. Статическое представление списка свойств, использующегося для хранения, может быть или XML или двоичными данными. (Версия двоичных файлов является более компактной формой списка свойств XML.) В XML каждый тип представлен определенным элементом. Представление во время выполнения списка свойств основывается на объектах, соответствующих абстрактным типам. Объектами может быть Какао или Базовые объекты Основы. Таблица 2-1 перечисляет типы и их соответствующие статические и представления во время выполнения.

Табличные 2-1  типы Списка свойств и их различные представления

Абстрактный тип

Элемент XML

Класс какао

Базовый тип Основы

массив

<array>

NSArray

CFArray (CFArrayRef)

словарь

<dict>

NSDictionary

CFDictionary (CFDictionaryRef)

строка

<string>

NSString

CFString (CFStringRef)

данные

<data>

NSData

CFData (CFDataRef)

дата

<date>

NSDate

CFDate (CFDateRef)

число - целое число

<integer>

NSNumber (intValue)

CFNumber (CFNumberRef, целочисленное значение)

число - плавающая точка

<real>

NSNumber (floatValue)

CFNumber (CFNumberRef, значение с плавающей точкой)

Булевская переменная

<true/> или <false/>

NSNumber (boolValue == YES или boolValue == NO)

CFBoolean (CFBooleanRef ; kCFBooleanTrue или kCFBooleanFalse)

Условно, каждое Какао и Базовый объект Основы, перечисленный в Таблице 2-1, вызывают объектом списка свойств. Концептуально, можно думать о «списке свойств», как являющемся абстрактным суперклассом всех этих классов. При получении объекта списка свойств из некоторого метода или функции Вы знаете, что это должен быть экземпляр одного из этих типов, но априорно Вы не можете знать который тип. Если объект списка свойств является контейнером (т.е. массив или словарь), все объекты, содержавшие в нем, должны также быть объектами списка свойств. Если массив или словарь содержат объекты, которые не являются объектами списка свойств, то Вы не можете сохранить и восстановить иерархию данных с помощью различных методов списка свойств и функций. И несмотря на то, что NSDictionary и объекты CFDictionary позволяют их ключам быть объектами любого типа, если ключи не являются строковыми объектами, наборы не являются объектами списка свойств.

Поскольку все эти типы могут быть автоматически брошены к и от их соответствующих типов Какао, можно использовать Базовый список свойств Основы API с объектами Какао. В большинстве случаев, однако, методы, предоставленные NSPropertyListSerialization класс должен обеспечить достаточно гибкости.

Когда использовать списки свойств

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

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

При поиске способа реализовать пользовательские настройки или установки приложения Какао обеспечивает класс в частности с этой целью. В то время как пользовательская система значений по умолчанию действительно использует списки свойств, чтобы хранить информацию, Вы не должны получать доступ к этим plists непосредственно. См. Руководство по программированию Предпочтений и Настроек и Предпочтения, Программируя Темы для Базовой Основы для получения дополнительной информации.

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

Представления списка свойств

Список свойств может быть сохранен одним из трех различных способов: в представлении XML, в двоичном формате, или в формате ASCII «старого стиля» наследовался от OpenStep. Можно сериализировать списки свойств в XML и двоичных форматах. Сериализация API с форматом старого стиля только для чтения.

Списки свойств XML являются более переносимыми, чем двоичная альтернатива и могут быть вручную отредактированы, но двоичные списки свойств намного более компактны; в результате они требуют меньшего количества памяти и могут быть считаны и записаны намного быстрее, чем списки свойств XML. В целом, если Ваш список свойств является относительно маленьким, преимущества списков свойств XML перевешивают скорость I/O и компактность, идущую с двоичными списками свойств. Если у Вас есть большой набор данных, двоичные списки свойств, включил архивы, или пользовательские форматы данных являются лучшим решением.