Как сохранить объекты, используя многопоточность в основных данных? - PullRequest
0 голосов
/ 17 марта 2010

Я получаю некоторые данные из веб-службы и сохраняю их в основных данных.Этот рабочий процесс выглядит следующим образом:

  1. получить xml-ленту
  2. просмотреть каждый элемент в этом фиде, создать новый ManagedObject для каждого элемента фида
  3. скачать несколько больших двоичных файловданные для каждого элемента и сохраните их в ManagedObject
  4. call [managedObjectContext save:]

Теперь проблема, конечно, в производительности - все работает в основном потоке.Я хотел бы как можно больше пересмотреть другой поток, но я не уверен, с чего мне начать.Можно ли поместить все (1-4) в отдельный поток?

1 Ответ

2 голосов
/ 17 марта 2010

Да, я рекомендую ознакомиться с Документами Apple по многопоточным базовым данным и моей статьей о MDN (Mac Developer Network) http://www.mac -developer-network.com / columns / coredata / may2009 / которые обсуждают то, что вам нужно избегать и как все настроить.

Кстати, сохранение большого количества двоичных данных в объекте Core Data, как правило, плохая идея. Правило гласит:

  • <100KB сохранить в объекте </li>
  • <1 МБ, сохраните в отдельном объекте, висящем в взаимосвязи </li>
  • 1MB сохранить на диск и сохранить его путь в управляемом объекте

Таким образом, вы можете ускорить загрузку двоичных данных в отдельные потоки, сохранить их на диск, а затем сообщить основному потоку NSManagedObjectID ссылающегося объекта и пути и позволить основному потоку сделать это очень быстро и легко. сшивание. Это позволило бы вашей реализации Core Data оставаться однопоточным и выполнять только загрузку данных.

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