Списки свойств представляют данные, а не детали реализации.Массив - это упорядоченный список.Диктовка - это отображение строковых ключей на значения.Что такое «набор»?Это не означает ничего особенного в простых текстовых данных.Если в списке не может быть дубликатов, не пишите дубликаты.Если он неупорядочен, игнорируйте порядок.Все, что связано с множеством, связано с манипулированием данными.(Какое поведение вы ожидаете от plist-набора, который на самом деле имеет дублирующиеся элементы? Будет ли он недействительным? Если нет, то как это не просто массив?)
Списки свойствне общий инструмент сериализации дерева объектов.Вот для чего NSCoder.Они в первую очередь предназначены для удобной для записи конфигурации, такой как Info.plist, и могут быть проанализированы на любом языке.NSUserDefaults также не является хранилищем данных общего назначения (если бы оно было, оно называлось бы «NSApplicationDataStore» или что-то в этом роде).Он был разработан для хранения пользовательских данных конфигурации таким образом, чтобы пользователи могли редактировать их вручную.
Исходный (NeXTSTEP) формат был гораздо проще набирать:
SomeKey = {
MyFirstProperty = ("here's", "a", "list");
SomeOtherThing = "I'm a string";
};
Apple перешла на XMLс OS X, что делает его гораздо сложнее печатать, но основной подход был тот же.(В первые дни OS X Apple предприняла много шагов для интеграции Java в систему, в том числе больше полагаясь на XML, включая формальные DTD . Оглядываясь назад, многие из этих шагов, вероятно, были неудачными, но онив то время имел смысл.)
Списки решают те же проблемы, что и JSON.Они предоставляют минимальный набор типов, которые необходимы для кодирования необработанных данных, а не структуры данных для реализации алгоритмов.
Я не говорю, что списки были созданы на основе некоторых математических принципов.Если бы NSSet был невероятно распространенным типом данных конфигурации, я уверен, что он нашел бы свой путь в этот формат.Но они просто не были изобретены как универсальный способ сохранения произвольных данных приложения, равно как и NSUserDefaults.