0

동시성 프로그래밍 가이드 (PDF 버전)의 37 및 39 페이지는 모순이있는 것처럼 보입니다.detachNewThreadSelector 호출 : 대상 : 객체 : 대 dispatch_async()

if (![anOp isConcurrent]) 
    [anOp start]; 
else 
    [NSThread detachNewThreadSelector:@selector(start) toTarget:anOp withObject:nil]; 

이 39 페이지에서 제외하고, 잘 보이는 문서 상태 : 37 페이지에서 코드 조각은 다음을 지정

당신은 거의 모든 작업을 수행하기 위해 파견 대기열을 사용할 수 있습니다

그 별도의 스레드에서 수행하는 데 사용됩니다. 디스패치 대기열의 이점은 사용하기가 더 쉽고 해당 스레드 코드보다 해당 작업을 실행하면 훨씬 효율적이라는 것입니다.

대신 detachNewThreadSelector : target : object :를 호출하는 대신 dispatch_async()를 호출하는 코드가 아닙니까?

답변

0

나는 당신이 말하는 것을 볼 수 있습니다. 나는 각 방법이 작동한다고 생각하지만 상황에 따라 갈 루트를 선택해야합니다. 주목해야 할 점은 NSOperationQueues을 사용하는 것이 좋습니다. mac osx에서는 GCD을 사용하여 최적화 할 수 있으므로 좋은 선택입니다. iOS 4 이하에서는 그렇지 않습니다. 따라서 GCD을 사용하면 이전 버전의 iOS에서 작업 할 때 심각하게 고려해야 할 사항입니다. 새 NSThread을 파견하는 경우 OS는 성능 문제가 될 수있는 스레드 전환을 유지해야합니다. GCD은 pool 접근법을 사용합니다. 즉, 기존 스레드를 사용하는 것이 좋습니다.

희망이

+2

는 아이폰 OS 4 이후, NSOperationQueue는 GCD를 사용하는 올바른 방향을 가리 킵니다. [NSOperationQueue 클래스 참조] (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html) – titusmagnus

+0

고맙습니다. titusmagnus – geminiCoder