2010-09-08 10 views
6

나는 NSOperationQueue이고 그 중 일부는 NSOperations입니다 (특히 NSInvocationOperations). 이 작업은 일부 계산을 수행하고 그에 따라 UI 요소의 상태를 변경합니다 (물론 performSelectorOnMainThread:... 통해). 종종 애니메이션을 사용합니다.일시 중지 NSOperation

내 UI에는 UINavigationViewController와 다른보기로 이동하기위한 단추가 있습니다. 따라서 계산/애니메이션이 진행되는 동안 사용자는 현재보기를 벗어날 수 있습니다. 그리고 내가 필요한 것은 사용자가 현재보기로 되돌아 올 때까지 어떻게 든이를 멈추는 것입니다.

내가 찾은 유일한 해결책은 스레드로부터 안전한 부울 플래그를 만들고 모든 스레드에서 확인하는 것입니다 (while! while! flag sleep_for_some_time;). 더 좋은 점이 있나요?

답변

12

질문이 다소 모호하기 때문에 모든 코드를 모른 채 말하기 란 어렵습니다. 그 말로는 다음과 같이 문제에 접근 할 수 있습니다 :

옵션 1. NSOperation의 하위 클래스에 자신의 원자 KVO 속성 "isPaused"를 추가하십시오. 작업 자체 내에서 해당 속성을 관찰하고 변경되는 경우 적절히 처리합니다.

옵션 2. 작업 대기열 자체를 일시 중단 했습니까? 그렇다면 작업 내에서 해당 속성을 관찰하는 것이 좋습니다. 각 값은 해당 값이 변경되면 개별적으로 조치를 취할 수 있습니다.

옵션 3. 대기열의 모든 작업을 취소하고보기가 다시 나타나면 새로운 작업으로 다시 시작하십시오.

전체적으로 이미 진행중인 작업을 일시 중지하는 마법의 탄환은 없습니다. 당신은 당신의 자신의 해결책을 구워야 할 것이다. 하지만 피해가 너무 심해서는 안됩니다.