Должен ли я сохранить в plist или Core Data? - PullRequest
24 голосов
/ 11 февраля 2011

Мне интересно, стоит ли мне сохранять данные в моем приложении в виде списка или с использованием Core Data ..

Мое приложение сейчас просто сохраняет твиты с временной шкалы и других пользователей.Что меньше, чем несколько сотен килобайт (около 200 килобайт в моем тестировании).В чем преимущества использования основных данных?

Ответы [ 3 ]

40 голосов
/ 11 февраля 2011

только несколько советов, которые могут помочь в разработке вашего приложения.

Прежде всего, было бы неплохо подчеркнуть, что CoreData на самом деле не сопоставима с plist.Я имею в виду, что CoreData - это слой абстракции модели данных поверх хранилища данных, который позволяет вам управлять отношениями и извлекать правила между различными объектами данных.За слоем CoreData хранилище данных может быть основано на plist (только для osx), базе данных sqlite или двоичном объекте.

Это также важно, поскольку помогает понять суть CoreData: если вам необходимо сохранить логические отношения между различными объектами данных или выполнить несколько запросов к одним и тем же данным или сериализовать / десериализовать большие структуры данных, CoreData предоставляетлучшее и быстрое решение, чтобы это произошло.Если вам просто нужно сохранить простой список элементов, которые просто нужно отобразить, отказов файла plist должно быть достаточно.

Другим важным моментом принятия решения является тип данных, которые необходимо хранить: согласно Apple, plist-файлы оптимизированы для строк, чисел, дат и некоторых двоичных данных.Вот что Apple говорит о plist:

Note that property lists should be used for data that consists primarily 
of strings and numbers. They are very inefficient when used with large blocks 
of binary data.
Many applications require a mechanism for storing information that will 
be needed at a later time. For situations where you need to store small 
amounts of persistent data — say less than a few hundred kilobytes — property 
lists offer a uniform and convenient means of organizing, storing, and 
accessing the data.

Это означает, что если вам нужно хранить «тяжелые» вещи или сложные объекты и управлять ими (например, с помощью поиска через них), система кэшированияАнализатор plist может быть неэффективным (в основном на iOS).

По моему мнению, ваша идея хранить около 200 тыс. линейных твитов (около 1000 твитов?) из временной шкалы будет хорошо работать с решением на основе plist.Также учтите, что анализатор plist сильно ускоряется благодаря небольшой структуре данных, тогда у вас будет лучшая производительность и низкое использование памяти (в основном во время запуска), потому что вам не нужно инициализировать CoreData или любую другую «оболочку кода» вокруг вашего хранилища данных.Просто на лету использование NSDictionary, NSArray и так далее.

И последнее, но не менее важное: реализация plist достаточно дешевая, чтобы дать вам возможность перейти к CoreData на следующем шаге.

Я имею в виду, что иногда нет необходимости использовать танкесли вам нужно поймать мух: -)

Надеюсь, это поможет.Ciao!

22 голосов
/ 11 февраля 2011

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

После долгой борьбы с Coredata, теперь, когда я, наконец, получил ее, я бы выбрал ее во всем в любой день.Да, у него есть крутая кривая обучения, но вы так много получаете «бесплатно», что я определенно потрачу время на его изучение и изучение.

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

Coredata действительно хорошо документирована Apple, поэтому вы найдете всеВам нужно начать и многое другое.Есть примеры, примеры проектов, видео, вы называете это - поэтому я определенно рекомендую вам взглянуть, если вы заинтересованы в производительности, масштабируемости и немного повеселиться тоже:)

14 голосов
/ 11 февраля 2011

Как уже отмечалось, запись в plist и чтение из plist почти тривиальны с использованием NSDictionary.Так что это может быть хорошим началом.

Тем не менее, если ваша модель данных начнет обогащаться за счет дополнительных атрибутов и связей, то Core Data обеспечит лучшее масштабирование и лучшую поддержку.Xcode упрощает проектирование вашей объектной модели (схемы) и даже генерирует исходные файлы, если вы решите создать подкласс NSManagedObject (что я почти всегда делаю).

Итог: Plist поможет вамработает быстрее;Базовые данные дадут вам много сил, когда придет время.

...