2012-12-13 3 views
2

현재 실행중인 스레드에서 NSOperation을 동 기적으로 실행하려고합니다. [NSOperation start]로 전화해도 될까요? 이것은 항상 현재 실행중인 스레드에서 실행됩니까?[NSOperation start]를 사용하여 수동으로 실행하면 NSOperation이 실행되는 스레드는 무엇입니까?

대안은 NSOperationQueue를 만들고, 작업을 추가 한 다음 waitUntilAllOperationsFinished 선택기를 호출하는 것입니다.

+0

나는 그것이 큐 않는 한 당신은 (현재 큐에 동 기적으로 실행할 수 있는지 모르겠어요를 동시 작업이 가능함). 기본 대기열에서 동기식으로 (즉, 대기 중) 대기하도록 요청한 경우 기본 대기열을 차단할 수 있습니다. 당신은 명확히 할 수 있습니까? – Rob

답변

3

[NSOperation start]으로 전화하면 현재 스레드에서 동 기적으로 실행됩니다. 작업을 둘러싼 모든 비동기 작업은 NSOperationQueue에 의해 처리되지만, -start을 호출하는 경우에는 모두 무시합니다.

물론 특정 NSOperation 하위 클래스는 다른 스레드에서 비동기 작업 자체를 스폰하기 위해 구현 될 수 있습니다. 그게 전부입니다. 그러나 작업 대기열에서 실행되는 모든 스레드에서 동 기적으로 실행되도록 설계된 작업은 -start을 호출하면 스레드에서 동 기적으로 실행됩니다.


는 예를 들어, 다음 코드는 실행하면

NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"operation"); 
}]; 
[op start]; 
NSLog(@"complete"); 

인쇄 :

operation 
complete 
+0

어디서 그런 언급이 있니? 특히 "현재 스레드"에서 실행되는데 다른 곳에서는 주 스레드에서 실행되며 현재 스레드에서는 실행되지 않습니다. – aloo

+0

@aloo : 어디에서 보았습니까? 그것은 절대적으로 잘못 되었기 때문입니다. 어쨌든, 문서는 "이 메소드의 기본 구현은 연산의 실행 상태를 업데이트하고 수신자의 메인 메소드를 호출합니다." '-main'은 동시 작업이 아닌 경우에 사용됩니다. 동기식으로 실행되는 작업. –

+0

끝내 주셔서 감사합니다. "NSOperation 인스턴스에서 대기열에 추가하지 않고"start "를 호출하면 작업이 주 루프에서 실행됩니다." from : http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues – aloo

관련 문제