2015-10-18 5 views
0

Должен ли я иметь разные контексты управляемых объектов для чтения и записи? Должен ли я использовать MOC для чтения в качестве родительского-ребенка? Какая может быть лучшая реализация MOC для написания?Рекомендации по использованию основных данных

+0

Реализация родительского ребенка может привести к медленной работе и усложнению. Ответ на ваш вопрос очень зависит от вашей ситуации. –

+0

Можете ли вы подробнее рассказать? Я хотел бы, чтобы об этом просветлели. – mownier

+0

Основываясь на вашем вопросе и других комментариях в этой теме, я предлагаю вам использовать один контекст главной очереди, поскольку это самый простой подход. Когда вы прочитали документацию и поняли некоторые из тонкостей многопоточности в отношении CoreData, вернитесь и задайте более конкретные вопросы. До тех пор это похоже на попытку объяснить центральную предельную теорему тому, кто не знает средние, дисперсии, независимые переменные или нормальные распределения. –

ответ

0

Существует множество способов установки стека, и у каждого есть свои плюсы и минусы.

Самое простое, что делать, пока вы более комфортно с Core Data, выглядит следующим образом:

Создание родительского MOC с типом параллелизмом частной очереди. Это будет ваш писатель, поскольку он будет делать это в фоновом режиме.

Создайте дочерний MOC с основной задачей параллелизма. Это будет ваш читатель на главной теме.

Если вам необходимо внести изменения в основной поток, вы должны сохранить оба контекста, чтобы сделать их постоянными. Лучше, если вы можете отправить все записи непосредственно родителям для фоновой обработки. Используйте FRC и обработчики уведомлений, чтобы узнать, когда нужно обновить ребенка.

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

+1

Что может быть самой сложной задачей, но по-прежнему лучше? Можете ли вы поделиться своим хорошо разработанным базовым стеком данных? По крайней мере, обсудите, как придумать такой стек. – mownier

0

Как уже указывалось, существует ряд факторов, определяющих, как и почему вы это делаете. Наиболее значительными из них, на мой взгляд, является необходимость поддержки многопоточности. Вот хорошая ссылка, которая объясняет (с изображением) родительскую/детскую парадигму. http://code.tutsplus.com/tutorials/core-data-from-scratch-concurrency--cms-22131

Я использую SSDataKit, чтобы помочь с настройкой основных данных, а затем расширься там, где мне нужно. В моих приложениях, которые сильно параллельны, я создаю новый MOC для каждого NSOperation с отношениями: Private Queue -> Main Queue -> Temporary Child Queue (эти операции выполняются по фоновым потокам). В более простых приложениях я использую базовую настройку SSDataKit (родительский/дочерний), и все.

Смежные вопросы