Эффективность при получении данных из основных данных и многопоточности - PullRequest
1 голос
/ 09 февраля 2012

У меня были проблемы с Core Data и многопоточностью, и я должен сказать, что это сводит меня с ума. После прочтения некоторых блогов и Apple Docs, я увидел, что рекомендуемый способ - создать NSManagedObjectContext (moc) для каждого потока и общий NSPersistentStoreCoordinator. Но так как я использую NSOperations, а они не привязаны к конкретному потоку, я должен создать новый moc для каждой операции.

Таким образом, каждый раз, когда я создаю moc, я устанавливаю координатор магазина на mock и извлекаю из него некоторые данные. Затем, если мне нужно использовать объекты, которые я извлек в другом потоке, скажем, на переднем плане, например, я должен получить их снова, создав новый moc и используя existingObjectWithID:error:.

Но, насколько мне известно, не существует метода, получающего массив идентификаторов объектов, поэтому я должен использовать этот вызов (existingObjectWithID:error:) для каждого объекта, что означает, что он может зацикливаться некоторое время 100 раз, например.

Мой вопрос: это правильный путь? Я что-то пропустил? Это быстрее, чем напрямую получать данные из основного потока?

Большая часть информации, которую я нашел, касалась изменения данных в разных потоках, но я почти ничего не нашел о получении.

Заранее спасибо:)

1 Ответ

1 голос
/ 22 февраля 2013

NSManagedObjectContext объекты не являются потокобезопасными. Это означает, что если вы хотите получить доступ к Базовым данным из нескольких потоков, вам потребуется один для каждого потока (и созданный в потоке тоже). Каждый из них может использовать один и тот же NSPersistentStoreCoordinator, который будет сериализовывать доступ к постоянному хранилищу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...