Но что, если я захочу оставить свою модель
объекты, независимые от хранилища
механизм, который используется (может быть, я
буду использовать их в проекте, где я
не нужно упорство вообще)?
В случае базовых данных постоянство - это всего лишь вариант, он не требуется, поскольку базовые данные не являются в первую очередь постоянным API. Вместо этого это API-интерфейс управления графами объектов, предназначенный для предоставления полного уровня модели в приложении разработки Model-View-Controller. Это настоящая функция - управлять объектами на графике для точного моделирования / симуляции реальных объектов, условий или событий и отношений между ними.
Вы изменяете параметры сохранения на уровне координатора постоянного хранилища. У вас есть возможность использовать хранилище sqlite, двоичное хранилище, хранилище xml plist или хранилище в памяти, которое, как следует из названия, вообще не является «постоянным» хранилищем. У вас также есть возможность написать свой собственный магазин. Подробнее см. Темы программирования для магазина Atomic .
Вам действительно нужен контекст управляемого объекта, чтобы получить любое значение из Core Data. Вместо того, чтобы называть его «NSManagedObjectContext», они должны были назвать его «NSManagedObjectManager», потому что это было бы все, что автоматическое обслуживание графа объекта сделано. Если вы хотите дублировать эту функциональность, вам придется написать собственный класс менеджера.
На мой взгляд, лучший способ обеспечить страховку для той гибкости, которую вы стремитесь записать в методе сериализации в общий формат данных, такой как JSON. Затем, если вам нужно переключиться на другую опцию персистентности, вы можете просто преобразовать граф объекта Core Data в JSON и отправить куда угодно.
Однако я бы не стал беспокоиться, если вы уже не уверены наверняка, что такая функциональность понадобится. Это очень, очень редко. Лучше кодировать только для известных требований, а затем тратить время на новые требования только тогда, когда они действительно появляются.