Методы наиболее успешной практики
Следуйте советам и инструкциям, обсужденным в этой главе для улучшения пользовательского опыта приложения, устойчивости и производительности. В целом используйте поддерживающее iCloud персистентное хранилище, поскольку Вы были бы локальное персистентное хранилище, помня несколько ключевых различий в проекте.
Оптимизация Приложения для iCloud
Традиционно, Вы профилируете и оптимизируете для памяти, хранения и использования CPU. С iCloud существуют другие важные факторы — а именно, доступность сети, пропускная способность и многократные коллеги. Интеграция iCloud базовых Данных обрабатывает эти проблемы для Вас, но следующим эти методы наиболее успешной практики, можно непосредственно повлиять на качество приложения и градуса, до которого Базовые Данные могут оптимизировать для Вас.
Храните Только Существенные Данные в iCloud
Пропускная способность, доступность сети и хранение являются ограниченными ресурсами и имеют реальные, финансовые последствия для Ваших пользователей. Когда Вы разрабатываете свою схему, хранилище в iCloud только информация, которая не может быть воссоздана.
Функция конфигурации модели управляемого объекта базовых Данных упрощает работу с данными, это разделяется между двумя местами хранения. С конфигурациями модели можно установить, где сохранены определенные объекты — или даже отдельные атрибуты —. Используйте конфигурацию модели управляемого объекта для разделения атрибутов и объектов, которые должны только быть сохраненными локально от тех, которые должны быть сохранены к iCloud. Посмотрите Модели Управляемого объекта в Базовом Руководстве по программированию Данных для дальнейшей дискуссии о конфигурациях модели. Кроме того, Базовые Данные эффективно сохраняют внешние данные к iCloud. Используйте внешнюю установку данных на атрибутах, которые, вероятно, будут содержать больше чем 4 КБ данных.
Для примера того, как сократить то, что Вы храните в iCloud, рассмотрите приложение Киоска, загружающее и кэши журналы с высокой разрешающей способностью в Базовых Данных и имеющее функцию, позволяющую пользователю добавлять закладки. Вместо того, чтобы хранить всю модель в iCloud, приложение хранит только объекты закладки с атрибутами, содержащими уникальный идентификатор журнала, которому соответствует каждая закладка.
Хороший подход состоит в том, что, если Ваше приложение отбирает большой набор исходных данных, оно не должно быть сохранено в iCloud, потому что могут быть воссозданы те записи. Если записи должны быть изменены, это может быть выгодно для разработки схемы и связанных конфигураций, позволяющих Вам хранить только изменения в iCloud.
Разработайте свой базовый стек данных, чтобы быть эффективными
поддерживающие iCloud Базовые приложения Данных не только знают о данных, создаваемых на устройстве, они знают о данных по другим устройствам. Это - хорошая идея помнить этот факт при разработке Базового Стека данных.
Например, Вы традиционно используете политики слияния, когда Вы хотите объединить изменения, внесенные в отдельных контекстах управляемого объекта и персистентных координаторах хранилища. С iCloud, напротив, Вы используете политики слияния объединить изменения, внесенные в запись на многократных коллегах. Для дальнейшего обсуждения политик слияния посмотрите Управление изменениями в Базовом Руководстве по программированию Данных.
Избегайте использования вложенных контекстов управляемого объекта с поддерживающими iCloud персистентными хранилищами. Поскольку изменения, сохраненные в дочерних контекстах, не сохраняются к iCloud, пока родительский контекст также не сохраняется, вложенные контексты создают ненужную сложность. Если Ваше приложение не сохраняет изменения в iCloud быстро, можно смутить пользователей приложения или, хуже, можете не оправдать их надежды.
Знайте, когда сохранить Ваш контекст
При сохранении контекста управляемого объекта Базовые Данные создают, в контейнере повсеместности, ряд изменений транзакции, которые, как гарантируют, будут применены вместе на других коллегах. Размер этого набора транзакции и частота, с которой Вы сохраняете свой контекст, оба непосредственно, влияют на производительность Вашего приложения.
Вы решаете, когда сохранить Ваш контекст управляемого объекта путем отображения действий в пользовательском интерфейсе к управляемым объектам, создающимся, изменившимся и удалившим в модели. Поскольку сохранение соответствует полному набору изменений, которые будут применены одновременно, Вы оправдываете надежды пользователей, когда Вы рассмотрите события, пользователь ожидает быть сохраненным другим коллегам. Путем настройки точек сохранения для соответствия полных наборов изменений Вы оправдываете надежды пользователей, избегаете неполных данных от того, чтобы быть сохраненным до других коллег и сокращаете сложность слияния. Вы также увеличиваете производительность путем ограничения числа изменений в единственном слиянии и путем ограничения частоты, в которой контекст выполняет слияние.
Например, рассмотрите приложение рецепта, сохраняющее рецепты пользователя к iCloud. Вместо того, чтобы сохранять контекст каждый раз, когда атрибут установлен, контекст сохраняется, когда пользователь заканчивает создавать весь рецепт. Поскольку факторы как доступность сети, пропускная способность и хранение были приняты во внимание, каждая коллега или получит весь рецепт или ничто, а не частичную запись.
Если Ваше приложение создает, изменяет или удаляет управляемые объекты в больших пакетах, несомненно, сохранят и сбросят Ваш контекст управляемого объекта часто или разделят задачу на меньшие части так, чтобы Вы разделили изменения между многократными контейнерами транзакции.
Миграция Пользовательских Данных к iCloud
Как Вы мигрируете, существующие пользовательские данные в контейнер iCloud зависят от размера Вашего файла хранилища. Если Ваш файл хранилища является маленьким, вызвать migratePersistentStore:toURL:options:withType:error:
на Вашем персистентном координаторе хранилища, передавая Ваше существующее персистентное хранилище и URL возвратился из добавления поддерживающего iCloud хранилища Вашему персистентному координатору хранилища.
Если Ваш файл хранилища является большим, создайте отдельного персистентного координатора хранилища и контекст управляемого объекта, который Вы используете для чтения из существующего хранилища. Следует иметь в виду, что объем памяти, использованный во время миграции, о дважды размере хранилища. Используйте NSReadOnlyPersistentStoreOption
опция, когда Вы добавляете существующее персистентное хранилище для улучшения производительности. Данные передачи в пакетах к Вашему поддерживающему iCloud контексту управляемого объекта вместе с эффективно созданными запросами выборки, устанавливая объем данных на пакет с setFetchBatchSize:
метод. Каждый раз Вы достигаете размера пакета, сохраняете и сбрасываете контекст управляемого объекта.
Посмотрите Исходные данные Отбора для больше об импорте данных и Обнаружении и Удалении Двойных Записей для больше о дедупликации.
Обновление Приложения для Использования в своих интересах iOS 7 и OS X 10.9
В iOS 7 и OS X 10.9, Базовые Данные и iCloud тесно интегрируются для упрощения работы, которую Вы выполняете для интеграции приложения с iCloud. Базовые Данные теперь создают и управляют хранилищем нейтрализации для Вас, длительные процессы были сделаны асинхронными, и уведомления обеспечивают больше понимания состояния данных Вашего приложения. Полагайте, что перезапись Вашей персистентной установки хранилища и кода обработчика уведомления использует в своих интересах эти улучшения — Вы найдете, что Ваша реализация является более простой, меньшей, и более прямой.
Из-за больших улучшений, сделанных к Базовой Интеграции данных iCloud, персистентное хранилище, Ваше приложение, создаваемое в предыдущих версиях iOS и OS X, не совместимо с iOS 7 и OS X 10.9. При обновлении приложения используйте различное NSPersistentStoreUbiquitousContentNameKey
создать новое поддерживающее iCloud персистентное хранилище. Тогда переместите существующие данные своего пользователя от старого хранилища до нового. Смотрите на Мигрирующие Пользовательские Данные к iCloud, потому что шаги, которые Вы предпринимаете для миграции от старого поддерживающего iCloud персистентного хранилища, подобны. Инструкции в Выполнении Миграций Схемы полезны также — поведение Вашего приложения с различными версиями схемы точно так же, как поведение Вашего приложения с различными поддерживающими iCloud версиями хранилища.