2010-06-28 12 views
4

iPad 앱을 개발 중입니다. 그것은 NSOperationQueue에 의해 처리 된 백그라운드에서 무언가를 다운로드하기 위해 NSOperation을 사용합니다. 나는 NSOperation에 retain을 추가하지 않는 한, operation의 action이 수행 된 후에 충돌을 발견했다. NSOperationQueue의 addOperation은 NSOperation을 유지하고 NSOperation 자체가 대상 객체를 유지한다고 말합니다. 그러므로 나는 왜 여분의 보유가 필요한지 이해하지 못하고있다.NSOperation에 추가 유지가 필요합니다.

비동기 작업을 취소하고 그 자리에 새 패턴을 만드는 패턴을 구현하려는 경우를 제외하면 내 진도를 저해하지 않을 것입니다. iPhone OS 4.0에서 (waitUntilFinished를 제공하는) 아직 개발할 수 없기 때문에 추가 보유권을 해제하거나 추가 보유권을 보유하지 않는 것이 안전하다는 것을 알 수있는 다른 방법이 필요합니다.

제안 사항?

+0

뭔가가 엉망이 된 것처럼 들립니다. 코드를 게시 할 수 있습니까? –

+0

코드가 너무 복잡하여 게시 할 수 없습니다. 그러나 그 문양은 질문과 같습니다. i : NSOperation * op = [[NSInvocationOperation alloc] initWithTarget : 셀렉터 : @selector (someSelector :) object : 클라이언트] autorelease]; [myOpQueue addOperation : op]; op에 여분의 유지를 넣지 않으면 someSelector가 실행 된 후 충돌이 발생합니다. self는 존재하는 싱글 톤이며 클라이언트는 op에 의해 유지되어야합니다. – Shaheen

답변

1

'백그라운드에서 무언가 다운로드'작업을 어떻게 수행하고 있습니까? NSOperation 객체를 다시 호출하는 비동기 메서드를 사용하는 경우 문제 일 수 있습니다. 내 추측은 NSOperation의 기본 방법에서는 비동기 메서드를 사용하여 다운로드를 시작하고 그 메서드는 나중에 NSOperation에 콜백해야한다는 것입니다. 문제는 NSOperation이 끝나면 비동기 다운로드가 NSOperation으로 다시 호출을 시도 할 때 NSOperation이 이미 완료 및 할당 해제 되었기 때문에 실패합니다. NSOperationQueue가 완료된 후에도 NSOperation을 유지함으로써 추가 유지가 수정됩니다. NSOperation 내에서 동기식 다운로드 방법을 사용하여이 문제를 해결해야합니다.

NSOperation에서 동기식 다운로드 방법을 이미 사용하고 있다면 문제가 무엇인지 모릅니다.

0

프레임 워크 내에서 대기열과 비동기 요청을 사용하면 ASIHTTPRequest - - NSOperationQueues 및 많은 비동기 다운로드와 관련하여 많은 문제를 해결할 수있었습니다.

나는 문제가 해결되고 잘 풀린다면 다시 시도하지 말라는 태도를 취한다.

관련 문제