Каков наилучший способ хранения долгосрочных данных в основных данных iPhone или SQLite? - PullRequest
0 голосов
/ 14 июня 2010

Я работаю над приложением iPhone, ориентированным на 3.1.3 и более поздние версии SDK. Я хочу знать, как лучше всего хранить долгосрочные данные пользователя на iphone без потери производительности, согласованности и безопасности.

Я знаю, что могу использовать Core Data, PList и SQL-Lite для хранения пользовательских данных в пользовательских форматах. Но хочу знать, какой из них будет полезен без ущерба для производительности и масштабируемости приложений в ближайшем будущем.

Ответы [ 2 ]

8 голосов
/ 14 июня 2010

Это зависит.Термин «пользовательские данные» охватывает широкий масштаб по размеру, сложности и использованию, каждый из которых имеет различные оптимальные стратегии хранения.

(1) Если размер и сложность низкие, а использование главным образом контролирует само приложение,сохраните данные в пользовательских значениях по умолчанию, используя NSUserDefaults.

(2) Если размер небольшой, а сложность может управляться массивами, словарями и т. д., то сохраните их в списке.Размер учитывается, потому что все данные, хранящиеся в списке, загружаются в память одним блоком.

(3) Если размер очень большой, но сложность низкая, например, большое количество записей шаблонов, таких как система учетных карточек, используйте прямой SQL.SQL быстрее находит и сохраняет простую и повторяющуюся информацию в очень большой БД.

(4) Если сложность очень высокая, используйте Core Data независимо от размера.Базовые данные специально разработаны для управления сложной информацией.Если размер маленький, используйте xml store.Если оно большое, используйте хранилище SQL.

По мере знакомства с Core Data я обнаружил, что использую его практически во всех случаях, кроме пользовательских настроек по умолчанию.У него крутая кривая обучения, но как только вы овладеете им, у вас появится мощный и простой в использовании инструмент для управления данными приложения.Я, вероятно, использую его в ситуациях, когда он не оптимален только потому, что это ускоряет время разработки.

3 голосов
/ 15 июня 2010

Я должен не согласиться со списком TechZen.Номер 3 - правильный ответ, только если вы имеете дело с устаревшей базой данных SQLite.Нет причин выбирать исходный sqlite вместо базовых данных.Базовые данные будут работать лучше почти в каждой ситуации и значительно сократят объем кода, который вам нужно написать.

Кроме того, я бы предостерег от использования списков.Их дорого читать и писать, и база данных Core Data превосходит их почти в каждой ситуации.

Что касается использования Core Data, вы всегда должны использовать серверную часть SQLite (XML не доступен на iOS), за исключениемв самых экстремальных условиях.

Короче говоря, если вы сохраняете одно значение, сохраните его в NSUserDefaults.

В противном случае используйте базовые данные.

Обновление

Есть одна ЕДИНСТВЕННАЯ вещь, которую нельзя сделать с Core Data более производительными, чем сырой SQLite в настоящее время.Это возможность обновлять значения одного столбца в десятках тысяч строк.Это связано с тем, что для изменения строки Core Data загружает эту строку в память, а затем снова записывает ее обратно.

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

Core Data превзойдет любые данныеаксессоры, которые вы собираетесь написать сами, и они будут обрабатывать запись и чтение из базового файла лучше, чем вы.Зачем изобретать велосипед?

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