Iphone, для регулярно обновляемых данных NSUserDefaults по-прежнему является самым простым вариантом?

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

Я разрабатывал свое приложение для хранения локальных пользовательских данных, которые регулярно изменяются / сортируются и на которые ссылаются для сохранения в виде глобальных переменных, удерживаемых делегатом приложения и на которые ссылаются через:

 appDelegate = [[UIApplication sharedApplication]delegate]
  

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

Существует ли общая рекомендуемая практика для локального хранилища, или это действительно зависит?

Ответ №1:

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

Комментарии:

1. amp; @DavidM: Да, и не забывайте, что первая попытка может показаться сложной, но как только вы с этим справитесь. Тогда вы сможете поиграть с ним на кончиках ваших пальцев. Так что, безусловно, стоит вложений. Отличный ответ от mvds

Ответ №2:

То, что вы делаете, прекрасно. Вероятно, лучшей практикой было бы иметь одноэлементный класс, содержащий все связанные данные. Затем в любом месте, где вам нужен день, вы просто вызываете [[Экземпляр GlobalData] arrayOfData] и получаете его. Таким образом, вы абстрагируете данные из вашего делегата приложения в централизованное хранилище.

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

Ответ №3:

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

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

Но при использовании NSUserDefault мы должны учитывать эти два факта. 1.) Для пользовательского объекта вам нужно будет использовать протоколы кодирования для их прямого сохранения с помощью NSUserDefaults.

2.) NSUserDefaults несколько раз показывает странное поведение, если мы не синхронизируем его должным образом. вы можете использовать его `[Синхронизация NSUserDefaults].

Core Data следует использовать при работе со многими взаимосвязанными пользовательскими объектами. Потому что его концепция сопоставления объектных отношений и прямого управления объектами довольно хороша.{на нижнем уровне используется SQLite}.

С другой стороны, SQLite относительно прост в реализации и имеет C api для взаимодействия с системой. Здесь вам нужно будет разбить пользовательский объект на атрибуты и выполнить запросы.