11

어떤 경우에 NSOperationQueue을 GCD보다 선호 하시겠습니까?NSOperationQueue vs GCD

이 두 가지 제한된 경험을 통해 나는 NSOperationQueue을 통해 기본적으로 얼마나 많은 동시 작업이 이루어지는지를 제어 할 수 있습니다.

GCD를 사용하면 대기열을 사용하기 때문에이 작업을 수행 할 수 없습니다. 멀티 코어 프로세서로 이것을 어떻게 든 시뮬레이트 할 수 있다는 것을 제외하고는 여전히 그것을 제어 할 수있는 방법이 없다고 생각합니다.

+4

가능한 복제본 http://stackoverflow.com/questions/7146052/gcd-nsoperationqueue-create-a-thread-manually http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central -dispatch – 0x8badf00d

+0

가능한 복제본 [NSOperation 대 ​​그랜드 센트럴 디스패치] (http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch) – Monolo

답변

19

NSOperationQueue은 iOS 4 현재 GCD에 만들어졌습니다. 가장 간단한 API를 사용하여 손쉽게 처리 할 수 ​​있습니다. 성능에 문제가 있는지 확인한 다음 필요한 경우 다시 평가하십시오. dispatch_async은 하위 레벨이며 일반적으로 C 유형 (단, 이에 국한되지 않음)이며 원샷 및 순차 유형 거래에 적합합니다. NSOperationQueues는 더 높은 수준의 Objective-C 코드이며 코드의 여러 지점에서 많은 작업을 추가하거나 동시성, 우선 순위 및 종속성을 관리해야하는 경우에 유용합니다.

+0

은 NSOperationQueue 또는 GCD보다 높은 API입니까? – xonegirlz

+1

NSOperation은 GCD 위에 구축됩니다. NSOperation은 부피가 커서 설정하기 위해 보일러 플레이트 코드가 더 많이 필요하지만 더 많은 기능을 갖추고 있습니다. 코드의 여러 부분에서 동일한 NSOperation 서브 클래스를 작성하여 대기열에 넣고 실행시킬 수 있습니다. –

7

NSPriorityQueue로 가정하면 NSOperationQueue를 의미합니까? 당신은 그것의 추가 기능이 필요한 경우 GCD를 통해 NSOperationQueue를 사용하는 주된 이유는 다음과 같습니다

  • 이전 OS 지원 작업 특성에
  • KVO
  • 종속성을
  • 큐 폭이 비교적 쉽게 할 수 있지만 (제한

그렇지 않으면, 당신은 NSOperationQueue를 취하는 API로 작업하지 않는 dispatch_semaphore_t와 GCD)에, GCD는 아마 더 나은 내기

입니다
0

상위 레벨에 있기 때문에 GCD를 사용하여 하위 레벨에서 처리하는 대신 작업/작업을보다 효율적으로 관리 할 수있는 NSOperationQueue를 발견했습니다.

+0

NSOperationQueue가 더 우아한 이유를 자세히 설명해 주시겠습니까? 그것이 없으면 당신의 대답은 도움이되지 않습니다. – cmaster