2012-10-16 3 views
2

NSOperation 하위 클래스가 있습니다. 메인 &을 재정의했습니다. 동시 작업이 아닙니다.NSOperation 하위 클래스 isCancelled isFinished isConcurrent

[op cancel]을 호출하면 작업이 대기열에서 제거되지 않습니다. 나는 인쇄 [OP의 isCancelled] [OP isFinished] & [OP isConcurrent]

작업이 취소됩니다 .. : 1 개 운전이 종료 : 내가 잘못 뭘 0

: 0 작업이 동시인가? 슈퍼 클래스가 취소 된 연산을 처리하지 않고 비 동시 연산의 'isFinished'키를 변경하지 않았습니까?

답변

4

ready을 무시하면 cancel도 무시해야합니다. 추상 클래스에서 발생하는 것은 cancel이 호출 될 때 대기열이 start를 호출 할 수 있도록 작업을 준비 상태로 설정하고 start 메소드는 취소 된 플래그를 확인한 다음 작업을 중단하고 isFinished = YES를 설정한다는 것입니다. 그런 다음 작업 큐 dealloc 작업입니다. 당신은 다른 하나 없이는 가질 수 없습니다.

2

NSOperation 하위 클래스는 [self isCancelled]를 주기적으로 확인하고 YES 인 경우 작업을 종료해야합니다. 조작 대기 행렬은 이미 실행중인 조작을 (즉시) 취소 할 수 없습니다.

+0

어디에서 확인할 수 있습니까? isReady는 결코 YES를 반환하지 않으므로 [op main]은 호출되지 않습니다. 타임 스탬프를 기반으로 대기열에서 부실 연산을 제거하려고합니다. - (NSDate *) 활성; – estobbart

+0

NSOperationQueue는 취소되고 아직 실행되지 않는 작업을 큐에서 자동으로 제거합니다. 내 대답은 이미 실행중인 작업을 취소하는 방법을 설명합니다. 타임 스탬프에 따라 main에서 작업을 취소 할 수 있습니다. – Felix

+0

@petersmith NSOPerationQueue는 isFinished = YES 일 때 자동으로 작업을 제거합니다. 나는 이것이 부모 클래스에 의해 처리 될 것이라고 생각했다. 내가 보는 문제는 내가 cancel 메소드 내에서 isFinished를 오버라이드했을 때 나는 이것을 본다. _YourInstance는 in_ 인 큐에 의해 시작되지 않고 isFinished = YES가되었다. – estobbart

관련 문제