Я только начал изучать основные данные. Когда дело доходит до многопоточности, в некоторых блогах говорится, что в этом случае мы должны использовать дочерние контексты (путем создания контекста и установки его родителя) и просто вызывать метод PerformBlock:. Однако некоторые другие блоги говорят, что нам следует избегать этого подхода, так как он содержит много ошибок. Я только начал разрабатывать приложение, которое манипулирует большой базой данных, и менеджер проекта проголосовал за основные данные (вместо SQLLite). Может ли кто-нибудь дать мне несколько направлений. Должен ли я использовать стратегию дочерних контекстов (введенную с iOS 5) или есть лучший способ выполнить многопоточность с Core Data? Спасибо.
Многопоточность основных данных с дочерними контекстами
- это руководство от Apple должно охватывать правильный метод. developer.apple.com/library/ios/ документация/какао/концептуальные/ 22.11.2013
- спасибо за Ваш ответ. Но я просмотрел весь документ и не дал представления о лучшей стратегии. Все, что я хочу знать, это: должен ли я использовать вложенные контексты или нет? 22.11.2013
- если вы проверите эту ссылку wbyoung.tumblr.com/post/27851725562/core -data-growing-pains вы обнаружите, что это отговаривает нас от использования этой новой техники (вложенных контекстов). Однако по этой ссылке cocoanetics.com/2012/07/multi-context-coredata нам говорят и советуют использовать его. Я запутался. 22.11.2013
- developer.apple.com/library/content/documentation/ Какао/ 22.04.2017
Ответы:
Должен ли я использовать стратегию дочерних контекстов (введенную с iOS 5) или есть лучший способ выполнить многопоточность с Core Data?
В дополнение к упомянутой вами концепции контексты управляемых объектов имеют встроенную поддержку параллелизма без родительских контекстов (см. https://developer.apple.com/library/ios/releasenotes/DataManagement/RN-CoreData/index.html).
Если вы создаете его с помощью initWithConcurrencyType:
, вы можете использовать performBlock:
и performBlockAndWait:
, и потоки будут обрабатываться за вас, при условии, что вы будете следовать основным шаблонам, описанным в приведенной выше ссылке. Подход родительского/дочернего контекста может помочь вам с синхронизацией.
Здесь также описан подход на основе NSOperation: http://www.objc.io/issue-2/common-background-practices.html. Лично я бы не стал его использовать, потому что встроенных API достаточно, но статья очень хорошо написана и должна дать вам хорошее представление о том, что происходит.
Как вы это реализуете, зависит от потребностей вашего приложения.
некоторые другие блоги говорят, что нам следует избегать этого подхода, так как он приводит к множеству ошибок.
Я бы проигнорировал их и сосредоточился на написании чистого кода для себя. Есть много приложений, которые используют многопоточность + Core Data без ошибок.