Подтвердить что ты не робот

Основные данные NSCoding VS

Я искал статью, в которой объясняются преимущества и недостатки NSCoding (NSKeyedArchiver...) по сравнению с использованием CoreData (SQLite....).

Есть много вариантов, я могу реализовать свой собственный бинарный читатель/писатель или использовать plists/xml/json... или использовать SQLite или NSCoding.

Я сейчас потеряюсь. Может ли какой-либо орган объяснить, в чем разница между основными функциями?

4b9b3361

Ответ 1

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

NSCoding, вообще говоря, является сериализатором данных. Множество встроенных объектов реализует протокол NSCoder, который позволяет сохранять их как двоичный поток (файл, в BLOB sqlite и т.д.). NSKeyedArchiver дает вам возможность поиска в таких потоках на основе строковой метки, немного похоже на словарь, но вы можете использовать только строки в качестве ключей. Этот подход хорош, если вам иногда приходится упорствовать в некоторых объектах разных классов.

Однако, если у вас много объектов одного и того же класса, вам лучше перейти на подход базы данных, SQLite или CoreData. CoreData - это практически оболочка SQLite, которая упрощает проектирование вашей модели данных и выполняет запросы к БД за шторами, не требуя написания операторов SQL. В CoreData вы определяете свои классы, и каждый экземпляр класса может сохраняться, т.е. Вы можете вернуть значения членов объекта, не имея их всегда в памяти. Это очень удобный способ хранения множества структурированных данных. Например, если вы напишете веб-браузер, вы можете сохранить закладки пользователя с именем, URL-адресом и, возможно, последним посещенным временем.

Для XML и JSON нет особых преимуществ, если вы используете данные только локально на устройстве. Если вам нужно связаться с какой-либо внешней службой, вы можете рассмотреть возможность кэширования/сохранения объектов XML/JSON, как они предназначены для последующего использования. Другим подходом было бы восстановление этих данных из ваших внутренних структур данных (см. Выше) каждый раз, когда вам это нужно.

Если вы сами создаете свою модель данных, я вижу еще меньше смысла использовать плиты, но, возможно, кто-то меня поправит.

EDIT: я добавлю ссылку на короткую ссылку для учебных пособий о том, как использовать NSCoding, Основные данные и в качестве бонуса SQLite.

ОБНОВЛЕНИЕ 12.01.2016: Если вы ищете решения настойчивости, я предлагаю вам также проверить Realm.

Ответ 2

Mattt Thompson предоставляет перевариваемое разбиение различных различий между NSCoding, Core Data и NSKeyedArchiver на NSHipster: http://nshipster.com/nscoding/

Ответ 3

Всегда существует сопротивление между объектами и реляционными структурами. Я всегда предпочитаю объекты, поскольку доступ к данным обычно является частью функциональности вашего приложения. С NSCoding вы получаете простоту, легкость отладки и управление с очень маленьким кодом для записи в любом случае. У вас также есть возможность включить NSCoding в структуры базы данных.

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

Ответ 4

Чтобы добавить к уже отличным ответам, NSCoding вместе с NSKeyedArchiver - отличный способ хранения данных, который является слишком большим (или несовместимым типом данных) для NSUserDefaults, но слишком малым и не многочисленным для CoreData.