4

NSOperationQueue에서 NSOperation을 관리하는 방법을 설명하는 몇 가지 문서를 살펴 보았습니다. 사용자가 진행 패널에서 취소 버튼을 누르거나 응용 프로그램을 종료 한 경우 항상 내 작업을 실행하지 않는 것이 중요합니다. 따라서 불필요하게 CPU 시간을 소비하지 않도록 작업을 취소하십시오.요청을 취소 할 때 NSOperationQueue에서 NSOperation을 제거하면 정확히 일치합니까?

그래서 작업을 취소해야 할 때마다 을 취소하고 추가 실행을 방지하기 위해 메서드를 취소해야합니다. 그런 다음 작업 객체 상태 isCancelled을 정기적으로 사용하여 작업이 취소되었는지 확인해야합니다. 다음은이에 대한 내 질문은 다음과 같습니다

NSOperation이 NSOperationQueue에서 삭제되는 경우는 (1) 요청을 취소에, 그럼 어떻게 우리가 아직 을의 isCancelled 그 NSOperation과 그 속성을 참조해야합니까? 애플 개발자 클래스 참조에 따르면

:. 큐에 추가 한 후 명시 적으로 취소하거나 작업을 실행 완료 될 때까지 "NSOperationQueue 클래스는 NSOperation 개체 집합의 실행을 조절, 작업은 큐에 남아 있습니다. "

(2) 내가 ARC를 사용하고 있다면 요청을 취소해야합니까? 나는 예를 든다. 나는 2 개의 뷰 컨트롤러 A와 B를 가지고있다. B에서는 NSOperation을 사용하여 8에서 10 개의 NSURLRequest를 만들고 NSOperationQueue에 모든 요청을 넣는다. 여기서 NSOperationQueue의 객체는 뷰 컨트롤러 B의 속성입니다. 따라서 다시 버튼을 누르면 A로 돌아가고, ARC에서는 NSOperationQueue의 객체가 자동으로 제거됩니다 (A를보기 위해 팝업). 모든 작업이 ARC 메커니즘에 의해 취소 되나요, 아니면 여전히 쓸모없는 실행을 피할 수있는 메커니즘이 있어야합니까?

내가 틀렸다고 정정하십시오. 이 질문에 대한 답변과 제안은 최고의 성능으로 Apps를 개발하는 데 반드시 도움이 될 것입니다.

감사합니다. 미리 감사드립니다.

답변

6

먼저 isFinished 속성이 true가 될 때만 작업이 큐에서 제거됩니다.

둘째, B를 dealloc하면 Queue가 dealloc되고 작업도 해제됩니다. 그러나 나중에 코드에서 이러한 작업 개체 또는 큐를 참조하지 않도록해야합니다.

+0

_isCancelled_ 메소드 수신자의 취소 메소드 호출로 조작이 명시 적으로 취소 된 경우 YES를 리턴하십시오. 따라서 요청을 취소하면 상태가 _isFinished_ TRUE로 바뀝니다. 그렇다면 내 질문 번호 (1)은 여전히 ​​서있다 ... – NSPratik

+0

'요청을 취소하면 상태가 isFinished TRUE가됩니다. ' 대기열에없는 작업에만 해당됩니다. 여기를 확인하십시오. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html#//apple_ref/occ/instm/NSOperation/isCanelled '취소에 응답합니다. 명령'섹션. 또한 위의 표에는 KeyPath와 설명이 나와 있습니다. 'isFinished 메소드가 YES를 리턴 할 때까지 연산 큐가 연산을 큐에서 꺼내지 않는다.' – croyneaus4u

+0

죄송합니다. croyneaus4u, 틀 렸습니다. 이 문은 대기열에없는 작업에만 적용 할 수 있습니다. 이제 제 질문 번호 1이 지워집니다. 고마워 royneaus4u. – NSPratik

관련 문제