2013-02-21 4 views
12

나는 동시 대신 NSOperationQueue 시리얼을 만들려고한다. 내가 아는NSOperationQueue 시리얼을 만드는 방법은 무엇입니까?

한 가지 방법은 다음과 같습니다 다른 방법은

NSOperationQueue *globalQueue; 
globalQueue.maxConcurrentOperationCount =1; 

있습니까?

+4

그런 식으로 잘못 되었나요? –

+0

유일한 방법은? 다른 어떤 방법으로? – lakesh

+0

예, 유일한 방법입니다. –

답변

13

직렬 대기열을 원하면 maxConcurrentOperation을 1로 설정하는 것이 좋습니다. 또한 새 큐를 생성하는 대신 [NSOperationQueue mainQueue]를 사용할 수 있으므로 메인 스레드에서 작업을 대기시킵니다. 그러나 이는 매우 짧은 조작이 추가되어 사용자 인터페이스가 차단되지 않는 경우에만 유용합니다. 그리고 다른 한편으로는 스레드와 동기화에 대해 걱정하지 않아도됩니다.

addOperations : waitUntilFinished : YES로 작업을 추가하거나 작업을 추가 할 때마다 waitUntilAllOperationsAreFinished 메시지를 보낼 수 있습니다. 그런 식으로 큐를 직렬로 정의하는 대신 조작을 직렬화합니다.

+0

각 작업에 종속 체인을 추가해야한다고 생각합니까? – yershuachu

+3

maxConcurrentOperation을 1로 설정한다고해서 시리얼을 통해 작업이 대기열에있는 순서가 유지된다는 의미가 아닌 경우 작업을 직렬화한다고 생각하지 않습니다. 삽입 순서를 유지하려면 작업간에 종속성을 추가해야합니다. NSOpeationQueue는 기본적으로 동시이며 실행을 위해 작업을 선택하는 순서는 유지되지 않습니다. 예 : 작업이 1, 2, 3, 4로 대기중인 경우 2, 3, 1, 4 순으로 실행될 수 있습니다. –

+0

@KunalShrivastava가 옳습니다. ['조작 객체의 실행 순서가 중요하다면, 작업을 대기열에 추가하기 전에 의존성을 사용하여 순서를 설정해야합니다. '] (https://developer.apple.com/library/content/documentation/) 일반/개념/동시성 프로그래밍 가이드/OperationObjects/OperationObjects.html # // apple_ref/doc/uid/TP40008091-CH101-SW38) – DanSkeel