4

모든 네트워크 요청을 처리하는 싱글 톤 NSOperationQueue가 있습니다. 그러나, 특히 하나의 긴 작업이 실행될 때 (이 특정 작업은 최소 25 초가 걸립니다), 다른 작업은 완료 될 때까지 실행되지 않습니다.iPhone : 순차적으로 작업을 실행하는 NSOperationQueue

maxConcurrentOperationCount가 NSOperationQueueDefaultMaxConcurrentOperationCount로 설정되어 있으므로 그게 문제가 아닙니다.

왜 이런 일이 일어날 수 있습니까? NSOperationQueues를 여러 개 생성하는 것 외에도 (나는 잘 모르겠지만 해결 방법이 없다),이 문제를 해결하는 가장 좋은 방법은 무엇인가?

감사합니다.

+0

동일한 문제가 발생했습니다. 기본값은 시뮬레이터에서 동시 작업을 허용하지만 장치에서 연속적으로 작업을 수행합니다. 더 많은 답변을 위해 현상금을 부쳤습니다. – luvieere

답변

4

the NSOperationQueue class referenceNSOperationQueueDefaultMaxConcurrentOperationCount에 따르면 "기본 최대 작업 수는 현재 시스템 조건에 따라 NSOperationQueue 개체에 의해 동적으로 결정됩니다."라는 의미입니다. 기본값이 1보다 큰 (특히 단일 CPU 시스템에서) 경우에는 아무것도 표시되지 않습니다.

-setMaxConcurrentOperationCount:을 명시 적으로 큰 값으로 설정하여 도움이되는지 확인해보십시오.

+0

명시 적으로 더 큰 값 (4)으로 설정하면 문제가 해결됩니다. 문서에 따르면 NSOperationQueueDefaultMaxConcurrentOperationCount (값이 -1)로 설정하면 합리적으로 가능한 최대로 동시성이 높아지기 때문에 혼란 스럽습니다. iPhone 에서조차, 그 가치가 실제로는 여러 스레드를 허용해서는 안되는 이유는 없습니다. –

관련 문제