2013-06-02 10 views
1

2 개의 AFNetoworking 작업에서 데이터를 가져오고 두 작업 모두 완료해야하는 방법이 있습니다. 내가 인터넷에서 읽은 하나의 작업을 다른 작업 마무리에 의존하게 만드는 NSOperationQueue를 가질 수 있습니다. 어떤 경우에는 이것이 좋은 해결책 인 것처럼 보이지만 NSOperation이되기에 적합한 코드가 없다면 어려울 것 같습니다.2 개의 비동기 작업을 완료해야하는 작업을 수행하는 방법

예 1. API 호출 A가

상 2. API 호출 B가 다른 화상 B에게 3. maskImage 함수 마스크 화상 B를 취득하는 화상을 얻는다 (예시 목적을위한) 모든 통계는 것 도움이!

+0

코드가 NSOperation에 적합하지 않은 이유는 무엇입니까? 또한, 당신은 불필요하게 것들을 복잡하게하지 않습니까? 플래그 두 개만 있으면 충분할거야, 안 그래? – Mar0ux

+0

왜 이것이 'NSOperation'에 적합하지 않습니까? 간단한 NSOperation * completionOperation = [NSBlockOperation operationWithBlock :^{...}];을 수행 한 다음 해당 작업에 종속성을 추가합니다. 이것은 정확하게'NSOperation' (당신은 분명히 메인 큐에서 복잡한 이미지 처리를하고 싶지 않습니다)에 적합한 것과 같습니다. – Rob

+0

@Rob NSBlockOperation은 훌륭하게 보이지만 존재하지는 않습니다. 덕분에 – jfisk

답변

3

NSOperation에 적합하지 않은 코드 종류는 확실하지 않지만 NSOperation을 사용하려는 귀하의 과도한 행위가 자신의 NSOperation 하위 클래스를 작성하지 않으려는 의도에서 비롯된 것인지 궁금합니다. 다행스럽게도 작업 대기열 사용은 그보다 훨씬 간단합니다. NSBlockOperation 또는 NSInvocationOperation을 사용하여 작업을 신속하게 생성 할 수 있습니다.

내가 일반적으로 사용하는 것 NSBlockOperation :

NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    // do my image processing 
    [self applyMaskToImage]; 
}]; 

또는 당신은이 NSInvocationOperation 사용할 수 있습니다

NSOperation *completionOperation = [[NSInvocationOperation alloc] initWithTarget:self 
                     selector:@selector(applyMaskToImage) 
                      object:nil]; 

당신은 다음의 (a) 당신이 다운로드 작업의 각 addDependency를 호출 할 수 있도록 completionOperation 둘 다에 따라 달라집니다. (b) 고객님의 대기열에 completionOperation을 추가하십시오.

+0

! 매일 새로운 것을 배우십시오. – jfisk