iPhone - разные способы хранения данных, преимущества и недостатки - PullRequest
3 голосов
/ 26 апреля 2011

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

Я прочитал много вещей о UserDefaults, CoreData, XML, plist, ... и я немного растерялся.

Пока я понимаю, что:

  • UserDefault предназначен для предпочтений и не предназначен ни для чего другого, даже если это можно сделать (небольшое количество данных). Он генерирует файл plist, который может быть легко читаем / проверен позже в XCode.

  • XML подходит для структурированного текста, но не для двоичных данных. И его легко писать, но не читать. Он генерирует XML-файл, который потом можно легко прочитать / проверить человеком в XCode.

  • CoreData является мощным, может сохранять любые данные любого размера, но его немного сложно / долго включать. И по-человечески прочитанные coredatas уже написаны "тяжело" (возможно?)

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

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

CoreData - Абстракция к базе данных SQLite, так что вы можете удалить операторы SQL и использовать вместо этого API.Преимуществом этого является его совместимость с API Какао.В наших производственных приложениях мы используем CoreData поверх SQLite.

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

XML - случай к случаю.В коммерческих приложениях мы используем только XML для взаимодействия между системами.Например, сервер iPad to Cloud.

UserDefault - только для параметров

2 голосов
/ 27 апреля 2011

Файлы Plist - это еще один вариант, если вы хотите управлять своим собственным хранилищем в файловой системе. NSArray и NSDictionary предоставляют методы для записи и чтения этих коллекций в файлы plist и из них, если вы можете хранить все свои данные в одном из поддерживаемых типов данных plist. Подробности см. В Руководстве по программированию Список свойств . Это может быть хорошим вариантом, если вы можете легко разбить ваши данные на отдельные файлы и всегда хотеть загрузить весь файл сразу.

CoreData - мощный инструмент, особенно если вы хотите хранить график объектов. Это может быть правильным выбором, если вы хотите иметь возможность легко хранить и загружать объекты модели.

SQLite отлично подходит, если вы хотите хранить реляционные данные и выполнять запросы к ним. Это может быть хорошим выбором, если вам нужны быстрые и эффективные запросы, но вам не нужно преобразовывать результаты в объекты модели (или есть какая-то причина для написания собственного слоя ORM).

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

Любая форма файлового хранилища может иметь дополнительное значение, если вы хотите предоставить эти файлы пользователю через настройки общего доступа к файлам, позволяя данным приложения появляться в каталоге «Документы iTunes» при синхронизации с ПК.


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

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

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

...