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

Обновлены основные данные concurrency документации?

Единственные (и самые последние) результаты, которые я нахожу в лучших практиках, приведены здесь: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html

Однако в самой верхней части страницы говорится:

"Важно: лучшие рекомендации для concurrency с основными данными сильно изменились с момента написания этого документа, обратите внимание, что эта глава не представляет собой текущие рекомендации."

Где я могу найти более подробную документацию для concurrency с основными данными?

4b9b3361

Ответ 1

Лучшее обсуждение теперь находится под Concurrency 'в документации NSManagedObjectContext.

Мое резюме:

Ограничение содержания по-прежнему требуется. Большие изменения, внесенные iOS 5/OS X v10.7, заключались в том, что контексты теперь могут иметь другие контексты в качестве родителей и могут управлять своими собственными очередями.

Изменения автоматически переносятся с детей на родителя при сохранении. Это то, что означает спасение. Только если ваш родитель является постоянным хранилищем, вы фактически совершаете на диск.

Итак, все, что связано с синхронизацией уведомлений, - это то, что Apple не хочет, чтобы вы следовали. Все эти механизмы все еще доступны, но Apple вытащила наиболее распространенные шаблоны непосредственно в рамки.

Ответ 3

Ограничение резьбы устарело. Вы можете увидеть это в заголовке для NSManagedObjectContext:

NSConfinementConcurrencyType        = 0x00,    /* this option is obsolete and not recommended for new code. */

Когда контекст создается с помощью -init, он вызывает инициализатор -initWithConcurrencyType: с аргументом NSConfinementConcurrencyType. Это модель потока, описанная в разделе "Руководство по программированию основных данных" на concurrency, которая устарела и не рекомендуется в течение некоторого времени. По словам одного инженера Core Data "Это просто не сработало".

К сожалению, руководство по программированию основных данных не обновлено, чтобы описать текущие рекомендуемые рекомендации для concurrency и других достижений. Но эй, по крайней мере, это не говорит вам использовать блокировку!

Недавно обновлено Руководство по программированию инкрементного магазина. В нем описывается, как реализовать NSIncrementalStore, и при этом очень хорошая работа по разъяснению некоторых внутренних компонентов Core Data. Например, в нем описывается, что такое ошибка, и как сбои срабатывают намного лучше, чем руководство по программированию основных данных. Заметки о выпуске Core Data для прошлых несколько лет включили некоторую обновленную информацию о лучших практиках, и есть несколько технических заметок, которые имеют отношение к Core Data.

Лучшей информацией за последние несколько лет стала ежегодная сессия "Что нового в основных данных" на WWDC. Для concurrency вы должны проверить эти сессии WWDC:

WWDC 2011 Что нового в Core Data на MacOS X. Сеанс MacOS X был немного более подробным, чем сеанс iOS.

и

Рекомендации WWDC 2012 по основным данным

Я бы посоветовал вам использовать кнопку "Обратная связь" на страницах руководства по программированию основных данных или подать сообщение об ошибке радиолокатора с просьбой обновить документацию.

Ответ 4

Ниже приведено руководство, которое я читал здесь: http://www.cocoanetics.com/2012/07/multi-context-coredata/ Несмотря на то, что он был написан в 2012 году, он все еще, похоже, соответствует тому, что я в настоящее время используется. Это помогает вам настроить основной родительский контекст с помощью NSMainQueueConcurrencyType, нескольких фоновых контекстов с помощью NSPrivateQueueConcurrencyType, а также имеет контекст записи фона, в котором хранится постоянное хранилище.

XCode 6 и Yosemite также, похоже, улучшают отладку основных данных: http://oleb.net/blog/2014/06/core-data-concurrency-debugging/. Это было полезно для понимания того, как использовать executeBlock в нужном месте.