Как использовать многопоточность с блоками и NSOperation и NSOperationQueue, чтобы проблем с параллелизмом не возникало?Что такое идеальный способ использования многопоточности с основными данными?
ответ
Правильный способ использования основных данных - это либо контекст MainQueue, либо контекст PrivateQueue. Если вы используете базовые данные в NSOperation, вам нужно либо перейти в контекст MainQueue через performBlock:
, либо performBlockAndWait:
. Если вы собираетесь использовать контекст PrivateQueue, вам все равно необходимо получить к нему доступ через performBlock:
или performBlockAndWait:
, основное отличие между ними состоит в том, что любая работа, выполненная против контекста MainQueue, блокирует пользовательский интерфейс.
В идеале, если вы обрабатываете данные в NSOperation, тогда вы должны построить контекст PrivateQueue, являющийся дочерним элементом контекста MainQueue, получить к нему доступ через performBlock:
или performBlockAndWait:
и сохранить его, когда вы закончите обработку данных.
Я настоятельно рекомендую рассмотреть Core Data Programming Guide и раздел о параллелизме.