새로운 주제는 아니지만 제 문제에 대한 명확한 답을 찾지 못했습니다.코어 데이터 및 다중 스레드 프로그래밍
"Book"이 포함 된 핵심 데이터 모델이있는 프로젝트를 진행 중입니다. 따라서 네트워크를 통해 json 데이터를 다운로드 할 때 이러한 북 모델을 내 핵심 데이터 (백그라운드 스레드에서 UI를 차단하지 않도록)에 저장 한 다음이 컨트롤러 모델과로드 테이블에이 Book 모델을 전달하려고합니다.
그러나 Apple의 Core Data Reference를 배웠을 때 혼란스러워졌습니다. 이 문서에서는 컨텍스트간에 관리 객체를 전달하면 안된다고 말합니다. 하지만 두 가지 컨텍스트가 있습니다. 하나는 주 스레드 용이고 다른 하나는 배경 스레드 용이며 다운로드, 저장 및 현재 업데이트 된 데이터 가져 오기에 사용됩니다. 그래서 내가해야 할 일은 백그라운드에서 관리 대상 객체 ID를 가져 와서 이러한 ID를 주 스레드의 컨텍스트에 전달한 다음 주 스레드에서이 ID로 관리 객체를 가져 오는 것입니다.
여기에 문제가 있습니다. 메인 스레드 블록 UI에서 ID로 관리 객체를 가져 오겠습니까? 메인 스레드에서 해당 ID로 관리 객체를 가져올 때 SQLite에 액세스합니까? 그리고 이러한 가져온 관리 객체 중 일부가 잘못 되었다면 이는 내가 소유권을 얻고 자한다면 IO를 수행 할 수 있음을 의미합니다. 여전히 UI가 차단되는 것 같습니다.
코어 데이터를 사용하여 백그라운드에서 데이터를 가져오고 이러한 데이터를 UI를 차단하지 않고 주 스레드 (UI 작업이 주 스레드에 있어야 함)에 표시하는 실제적인 패턴은 무엇입니까?
도움 주셔서 감사합니다.
은 다시 생각 :
사실 모든 해답은 내 문제가 해결되지. 그러나 핵심 데이터에서 다중 스레드 프로그래밍을 사용해야 할 때 고려해야 할 사항이 있습니다. 대부분의 경우, 핵심 데이터를 그대로 사용하는 것이 효율적일 수 있습니다. 나는 메인 스레드에서 코어 데이터 연산의 비용을 과대 평가했다.
그러나 아직도, 누군가가 배경에서 가져 오기를 수행하고 메인 스레드에 표시하는 실용적인 패턴을 추천하기를 바랍니다. 나는 그것을 감사 할 것이다!
이것이 도움이된다고 생각합니다. 내 경우에는 사용자가 더 많은 정보를로드 할 때 50 권의 책을 다운로드하고 핵심 데이터를 삽입하고 모든 책을 내 UI에 표시합니다. 나는 코어 데이터 50 항목은 단지 작은 양의 데이터라고 생각합니다. 그러나, 사용자가 처음 앱을 실행할 때 모든 책을 다운로드한다면, 메인 스 레드에서이 모든 작업을 매우 무거울 수도 있습니다. –