0

아직 NSOperations을 이해하고 있습니다. 사용자가 HTTP 요청을 시작하고 요청을 NSOperation 객체로 캡슐화 한 다음 잊어 버릴 수 있기를 바랍니다. 내 주 코드에서 NSOperation 개체를 릴리스하고 싶습니다만, NSOperationQueue에 의해 유지됩니다.NSOperatioQueue에 의한 NSOperation 보존

각 NSOperation은 결과를 코어 데이터에 저장하여 완료되거나 취소 될 수 있습니다. 그러나, 나는 개별 작업이 아닌 모든 미해결 작업 만 취소 할 필요가 있다고 생각합니다. 예를 들어 응용 프로그램이 종료되면 모두 취소 할 수 있습니다.

이렇게하면 사용자가 개별적으로 추적하지 않고도 요청을 계속할 수 있습니다. 동일한 객체 포인터를 다시 사용하여 NSOperation 객체를 초기화하고 대기열에 넣은 다음 해제 할 수 있습니다. NSOperationQueue가 NSOperation이 추가 될 때 NSOperationQueue가 유지되면 이는 매우 직관적입니다.

대기열에서 작업을 유지하므로 인스턴스화 된 위치에서 릴리스 할 수 있습니까?

또한 ARC에 익숙하지 않기 때문에 (아직 시도하지 않았습니다.)이 소유권을 어떻게 이전합니까? NSOperation이 대기열 내에서 강력한 속성 특성을 갖기를 원한다고 생각하지만 약한 속성 속성으로 인스턴스화하려고한다고 생각하지 않습니다.

답변

1

당신 말이 맞습니다. NSOperationQueues는 NSOperations가 추가 된 (강력한 참조) 값을 유지합니다. 작업이 큐에서 자동으로 제거되고 작업이 끝나면 해제됩니다.

NSOperation 서브 클래스가 isExecuting 및 isFinished에 대해 KVO를 준수하는지 확인해야합니다. NSOperationQueue는 NSOperation이 완료되었는지 전혀 알 수 없습니다.

ARC를 사용하면이 경우 소유권을 "양도 할 필요가 없습니다. Core Foundation 객체 (CF * Create 또는 CF * alloc과 같은 메소드)를 생성하고 Objective-C 객체에 할당 할 때만 소유권을 "이전"합니다.

관심이 있으시면 ARC on my blog에 대해 자세히 썼습니다.

내가 필요한 거의 모든 것을 처리하는 네트워킹 프레임 워크 인 MKNetworkKit을보고 싶을 수도 있습니다.

+0

감사합니다. Mugunth. 두 참조 모두 훌륭한 리소스처럼 보입니다. NSOperation에 대해 알아야 할 기본 사항을 더 잘 이해하기 위해 MKNetworkKit을 이미 조사했습니다. ARC 블로그는 지금까지 좋은 독서입니다. 그것은 매우 완전 해 보인다. – Jim

+0

"NSOperation 서브 클래스가 isExecuting에 대해 KVO를 준수하는지 확인하고 NSFperished가 실패하면 NSOperationQueue가 NSOperation이 완료되었는지 전혀 알 수 없습니다." - 가치있는 강조. – prajul