2012-10-28 3 views
1

때때로 코코아는 사용자가 비동기 방식으로 NSOperationQueue 또는 dispath_queue_t 중 하나를 전달할 수 있습니다 : 언젠가비동기 메서드에 어떤 서명을 사용해야합니까?

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 
-[AVPlayer addBoundaryTimeObserverForTimes:queue:usingBlock:] 
-[NSNotificationCenter addObserverForName:object:queue:usingBlock:] 

하지 않습니다 방법에 큐를 통과 나에게

-[NSDocument continueActivityUsingBlock:] 
-[NSSavePanel beginWithCompletionHandler:] 
-[GKAchievementDescription loadImageWithCompletionHandler:] 

가 있기 때문에, 모호한 보인다 블록을 생성 할 때 항상 원하는 대기열을 잡을 수 있습니다. 예 :

NSOperationQueue *q = …; 
[aDocument continueActivityUsingBlock:^{ 
    [q addOperationWithBlock:^{ 
     // Do actual work here. 
    }]; 
}]; 

어쩌면 내가 누락 된 행렬이 의미가 있습니까?

답변

4

에 따라 다릅니다.

완료시 콜백이 필요합니까?

은 대기열을 지정해야합니다. NSOperationQueue 대 GCD 대기열 유형은 사용자가 결정합니다. 당신도 항상로 콜백을 정의하는 경우

그러나, 또는이다 (항상는 UI 광범위을 업데이트 할 예정이다 콜백에 적합한 것) 메인 큐에 호출되는 항상이 될 것 비동기 적으로 호출됩니다 (즉, 콜백이 일반적으로 비동기 대기열에 전달됨). 대상 대기열을 전달할 이유가 없습니다.

콜백이 조작이 직렬화되어야하는 데이터와 상호 작용할 가능성이있는 경우, 직렬화 프리미티브 (대기열)를 제공하는 API를 정의하는 것이 강력한 지름길이 될 수 있습니다.

+0

감사합니다. 이제 명확하게 전달 된 블록을 순서대로 실행하도록 설계된 큐를 필요로하는 메서드를 볼 수 있습니다. – Kentzo

관련 문제