Каков наилучший способ хранения статических данных в приложении для iOS? - PullRequest
3 голосов
/ 19 июля 2010

В моем приложении значительный объем данных, к которым он должен получить доступ, но приложение никогда не изменит его.В настоящее время я использую эти данные в других приложениях в файлах JSON и базах данных SQL, но ни одно из них не кажется очень простым для использования в iOS.

Я не хочу использовать CoreData, которая предоставляет массу ненужных функций и сложности.

Будет ли хорошей идеей сохранить данные в файле PropertyList и создать класс метода доступа?Есть ли какие-нибудь простые способы включить SQLite без использования маршрута CoreData?

Ответы [ 4 ]

4 голосов
/ 19 июля 2010

Вы можете использовать plist, только если объем данных относительно невелик. Plist полностью загружен в память, поэтому вы можете использовать его только в том случае, если сможете поддерживать все объекты, созданные plist, в памяти сразу столько времени, сколько вам нужно.

Базовые данные имеют кривую обучения, но при использовании они обычно менее сложны, чем SQL. В большинстве случаев «более простой» SQL приводит к большему количеству кодирования, поскольку в конечном итоге вам приходится дублировать большую часть функциональных возможностей Core Data, чтобы вставить процедурный SQL в объектно-ориентированный API. Вы должны вручную управлять использованием памяти всех данных, отслеживая срок хранения. Вы пишете много кода SQL каждый раз, когда вам нужны данные. Я обновил несколько приложений с SQL на Core Data, и во всех случаях реализация Core Data была меньше и чище, чем SQL.

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

Конечно, если вы уже обладаете высокой квалификацией в управлении SQL в C, то лично вы можете быстрее вывести приложение на рынок, используя SQL. Однако, если вам интересно, что вы должны планировать использовать в целом на платформах Apple, Core Data - это почти всегда ответ, и вы должны потратить время на его изучение.

3 голосов
/ 19 июля 2010

В зависимости от типа ваших данных, размера и частоты их изменения вы можете просто упростить задачу и использовать список свойств. В противном случае, я бы использовал SQLite (задокументированный в ответе Джергасона). Хотя позвольте мне сказать, что если у вас относительно небольшой (менее пары сотен) набор базовых типов (массивы, словари, числа, строки), которые меняются не часто, то список свойств будет, на мой взгляд, лучшим выбором. .

В качестве примера тому, что в одной из моих игр я создаю уровни из одного списка свойств для каждой сложности. Поскольку существует только несколько уровней на сложность (99) и небольшой набор параметров для каждого (количество элементов в игре, их начальные позиции, масса и т. Д.), То это имеет смысл, и я избегаю прямого обращения с SQLite. или еще хуже, настройка и поддержка CoreData.

3 голосов
/ 19 июля 2010

Вы можете просто использовать SQLite напрямую без использования Core Data, используя SQLite C API .

Здесь - это учебник, который я нашел в вашем примере использования - просто загрузка некоторых данных из базы данных SQLite. Надеюсь, это поможет.

1 голос
/ 19 июля 2010

Что вы подразумеваете под «лучшим»? Что за данные?

Если это набор объектов, то JSON или (двоичный) plist не являются ужасными форматами, так как вы хотите, чтобы все, загруженное в память, проходило по графу объектов. Сравните эффективность использования пространства и загрузку, чтобы выбрать, какой использовать.

Если это набор двоичных BLOB-объектов, сохраните BLOB-объекты в большом файле, сопоставьте файл памяти (NSDataReadingMapped a.k.a. NSMappedRead) и используйте индексы в BLOB-объектах. Фреймворки iOS используют их сочетание (например, существует множество .png, но также и «other.artwork», который содержит только необработанные данные изображений).

Вы также можете использовать NSKeyedArchiver и друзей, если ваши классы реализуют протокол NSCoding, но есть некоторые накладные расходы на управление графами объектов, и создаваемый им plist-формат не совсем удобен для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...