정기적 인 서버 동기화 프로세스를 실행하는 iPad 앱이 있습니다. 10 초마다 실행됩니다. 동기화 프로세스는 CoreData SQL 기반 저장소에 삽입 된 레코드를 다운로드합니다. 경우에 따라 처리되는 레코드 수를 수백 또는 수천 개로 줄일 수 있습니다.NSOperation과 비동기 NSURLConnection
현재 동기화 프로세스는 주 스레드에 의해 트리거 된 Asynchronous NSURLConnection
을 기반으로합니다. 모든 NSData
이 async
호출에 의해 수집되면 주 스레드는 백그라운드에서 NSOperation
을 실행하여 NSData
을 구문 분석하고이를 db에 삽입합니다.
따라서 NSURLConnection
은 비동기 적으로 실행되며 db insert는 백그라운드에서 실행 중입니다. NSOperation
. 그러나 NSURLConnection
및 NSOperation
의 오케스트레이션은 주 스레드에서 수행됩니다. 많은 양의 데이터가 다운로드되었다는 것을 감안할 때, 메인 스레드에서이 작은 양의 오케스트레이션이 내 UI 응답에 영향을 줄 수 있다고 생각합니다.
그래서 코드를 단일 배경 NSOperation
으로 리팩터링하고 NSURLConnection
을 동기 호출로 만들려고합니다. 하나의 NSOperation
은 동 기적으로 NSData
을 다운로드하고 db 삽입을 관리합니다.
상당한 리팩토링에 착수하기 전에 나는 이것이 좋은 결정인지 여부에 대한 사람들의 견해에 관심이있을 것입니다.
현재 메커니즘을 통해 UI에서 가끔씩 주저하는 것을 보았습니다. 백그라운드에서 전체 메커니즘을 배치함으로써 NSOperation
나는 UI가 응답 성이 유지되기를 바라고 있습니다.
지혜의 모든 단어는 매우 감사하겠습니다.
감사합니다.
NSURLConnection 대리자 메서드가 처리되는 큐를 지정할 수 있지만이 코드는 필요하지 않습니다. – jrturton