2013-01-02 1 views
0

내보기가 나타날 때마다 실행해야하는 장기 실행 작업 (DB에서 복잡한 데이터를 가져 오는 IE)이 있습니다. 나는 성능상의 이유로 장기간의 작업을 메인 스레드에서 벗어나고 싶다. 또한 UI 관련 작업을 수행하기 위해 주 스레드를 다시 가져야한다는 것을 알고 있습니다. 이 작업을 수행하기위한 올바른 GCD 패턴을 파악하려고합니다. 나는 GCD 워드 프로세서에서 보는 바로는,이 일을 할 수있는 "오른쪽"방법이 될 것 같다,하지만 사람들이 더 유용 할 다른 패턴을 찾을 수 있을지 궁금 : 나는 기본적으로 비동기 적으로 말하고viewWillAppear에서 장기 실행 작업에 적합한 GCD 패턴은 무엇입니까?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    // Add long running code for off the UI thread here. 

    dispatch_async(dispatch_get_main_queue(), ^{ 

      // Add UI updating code here back on the UI thread. 

    }); 
}); 

(IE는 UI 스레드를 차단하지 않습니다.) 별도의 스레드로 이동 한 다음 몇 가지 작업을 수행 한 다음 기본 스레드로 돌아가서 UI를 업데이트하십시오.

+1

어떻게 그럴 수 있습니까? – Joe

답변

1

귀하의 접근 방식이 좋습니다. 내가 볼 수있는 유일한 단점은 장기 실행 작업을 취소 할 수있는 방법이 없다는 것입니다. 이로 인해 메모리 및 기타 리소스 정체가 발생할 수 있습니다.