2012-11-07 3 views
2

테이블에 두 섹션을 잠깐 업데이트하는 방법이 있습니다. 나는 다음과 같이하고 싶다.백그라운드 처리 방법에서 동일한 디스패치 대기열을 사용합니다.

dispatch_queue_t lowQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); 
    dispatch_queue_t mainQueue = dispatch_get_main_queue(); 

    dispatch_async(lowQueue, ^{ 
     NSArray *tempArray = // do long running task to get the data 

     dispatch_async(mainQueue, ^{ 
      // update the main thread 
      [self.activityIndicatorView stopAnimating]; 
      [self.reportsTableView reloadData]; 
     }); 
    }); 

dispatch_async(lowQueue, ^{ 

NSArray *tempArray2 = // same thing, do another long task 

    // similarly, update the main thread 

같은 방법으로 같은 lowQueue를 사용하면 괜찮습니까? 감사.

답변

9

예, 동일한 방법으로 lowQueue을 사용할 수 있습니다. DISPATCH_QUEUE_PRIORITY_LOW 글로벌 대기열을 가져 와서 lowQueue에 참조를 저장하면 계속 dispatch_async GCD 호출로 추가 블록을 계속 대기시킬 수 있습니다. dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)에 전화 할 때마다 동일한 동일한 발송 대기열에 대한 참조가 반환됩니다.

모든 글로벌 디스패치 대기열은 동시 대기열이므로 GCD는 이것이 런타임시 시스템에서 가장 효율적이라고 결정한 경우 두 작업의 두 블록 모두에서 각 블록을 대기열에 놓고 동시에 실행합니다 (주어진 시스템로드, 사용 가능한 CPU 코어 , 현재 실행중인 다른 스레드의 수 등).

관련 문제