2011-07-26 5 views
3

NSOperationQueue 및 NSInvocationOperation을 유지하기 위해 다음 두 가지 질문이 문맥에서 요구됩니다.NSOperationQueue에서 NSInvocationOperation을 제거/취소하는 방법은 무엇입니까?

여러 비디오를 다운로드 할 때이 개념을 사용 했으므로 비디오를 다운로드 한 후 NSOperationQueue에서 NSInvocationOperation을 제거/해제하려면 어떻게해야합니까?

또한 다운로드 진행 중에 특정 비디오를 다운로드하지 않으려면 어떻게해야합니까?

답변

5

[_operation cancel];가 어떻게/해제 비디오 다운로드 완료 후 NSOperationQueue에서 NSInvocationOperation 추가 제거합니까, 동작, 즉. 메시지를 취소 제공?

작업이 완료되면 즉, - isFinished이 true를 반환하면 작업이 자동으로 대기열에서 제거됩니다.

또한 다운로드 진행 중에 특정 비디오를 다운로드하지 않으려면 어떻게해야합니까?

조작을 부분적으로 중단하려면 -cancel 메시지를 보내야합니다. 그러나이 작업을 마술처럼 중단되지는 않습니다. 작업이 취소되었는지 정기적으로 확인하고 작업이 완료되었다고 판단되면 작업을 완료해야합니다. 따라서 청크로 비디오를 다운로드하고 각 청크 이후 작업의 취소 된 상태를 확인해야합니다. 다음 의사는 도움이 될 수 있습니다 : 결국 때까지 작업의 취소 상태를 확인 할 수 없기 때문에

while (![myOperation isCancelled] && thereIsMoreData) 
{ 
    download a chunk of data and save it 
} 

이 의미 예를 들어, 당신은 데이터를 얻을 수 NSURLConnection-sendSynchronousRequest:returningResponse:error:을 사용할 수 없습니다 데이터가 이미 다운로드되었습니다.

+0

동일한 로직을 구현했지만 NSOperationQueue의 혼동으로 인해 조금 부족했습니다. 당신의 설명적인 대답에 대해 JeremyP에게 감사드립니다. 제가 원했던대로 완벽하게 작동합니다. –

+0

잠시 동안 비디오의 비동기 다운로드 프로세스를 일시 중지 할 수 있습니까? –

+0

나는 잠시 동안 실제로 연결을 끊기를 원한다고 생각한다. 그렇다면 아마 서버에 의존 할 것입니다. 예를 들어, HTTP/1.1은 클라이언트가 부분 다운로드를 요청할 수있게 해주는'range' 헤더를 가지고 있지만, 서버는이를 수행하기위한 로직을 구현할 필요가 없습니다. – JeremyP

1

NSOperation이 완료되면 해당 작업이 대기열에서 자동으로 제거됩니다. Ref link.

NSOperation의 하위 클래스를 만듭니다. 각 작업에 대한 식별자를 보관하십시오. 모든 작업을 배열로 저장하십시오. u는 작업이 계속 싶지 않는 경우, 단지

+0

Gomathi에게 감사드립니다. :) –

+0

하지만 NSInvocationOperation 개체를 일찍 취소하려면 어떻게해야합니까? 작동 개체에 대한 -cancel 메서드를 호출 할 수 있지만 어떻게 조작 개체에 대한 참조를 얻을 수있는 이해, 그래서 if (myOperation.cancelled == true) 다음 초기에 종료 할 수 있습니까? –

관련 문제