2013-03-07 5 views
5

안녕하세요 저는 현재 다음과 같은 속성이있는 응용 프로그램 건물입니다 :iOS에서 데이터를 가져 오는 별도의 스레드를 어떻게 처리합니까?

  1. 한 번
  2. 에 하나 개의 항목을 표시하는 피드가 저장 코어 데이터를 사용을 항목 중 경우, 응용 프로그램 호출 비동기 적으로 서버에서 가져 오기

비동기 가져 오기는 다소 까다로울 수 있습니다.

현재 우리는 서버에서 가져온 항목을 직접 코어 데이터에 저장합니다.

앱에 새로운 항목이 필요할 때마다, 보이지 않는 항목에 대해 핵심 데이터를 쿼리하고 있습니다.

이 핵심 데이터에 대한 지속적인 쿼리로 인해 앱의 성능과 관련하여 몇 가지 중요한 영향을보고 있습니다.

우리는 메모리에서 Array를 사용하고 그것에 대한 인덱스를 유지할 생각 이었지만, 일단 아이템이 없어지면 비동기식 인출 방식은 잠금 및 기타 동시성 측정을 사용하여 어레이 스레드를 유지해야하므로 너무 복잡합니다. 안전한.

총 통화 수를 줄이기위한 제안 사항이 있습니까?

+2

앱을 프로파일 링하고 가져 오기 속도가 느린 것을 확인 했습니까? –

+2

어떤 동시성 유형을 사용하고 있습니까? – mattyohe

+1

성능 문제의 증상은 무엇입니까? CoreData는 자체 MOC에 캐싱 시스템을 가지고 있습니다. – Jeremy

답변

0

표시 할 것으로 예상되는 합리적인 수의 항목을 가져 오기 위해 영구 저장소로의 이동을 최소로 유지해야합니다. 핵심 데이터는 관리 객체에 오류를 발생시키는 데 매우 효율적이므로 메모리 공간이 문제가되지 않아야합니다.

표시 할 항목이 부족하지만 배열에 남아있는 항목이 남아있는 경우 더 많은 항목을 가져 와서 가져 오십시오.

이 시점에서 결과가 나타나지 않으면 비동기 큐를 자체 관리 객체 컨텍스트로 보내고 새 관리 객체를 만들고 변경 사항을 병합 할 수 있도록 기본 컨텍스트를 저장하고 알립니다.

일단 완료되면 새 항목을 가져 오는 것입니다.

관련 문제