2014-01-29 3 views
1

내 앱은 클라우드 데이터베이스와 핵심 데이터간에 많은 동기화를해야하며 다양한 방법으로 발생합니다. 간단한 백그라운드 스레드를 사용하여이 작업을 수행합니다.직렬 백그라운드 스레드를 만들고 관리하는 방법

그러나 앱에서 너무 빠르게 처리하면 다른 동기화 작업이 동시에 발생할 수 있으며 이로 인해 의도하지 않은 결과가 발생할 수 있습니다.

따라서 하나의 스레드에서만 모든 동기화 작업을 연속적으로 수행하려고합니다. 동기화 작업을 수행해야 할 때마다 전 스레드가 이전에 제출 된 모든 작업을 완료 할 때까지 실행되지 않도록 전용 스레드에 디스패치하고 싶습니다. 어떻게 관리해야합니까? 구체적으로 ...

  1. 백그라운드 시리얼 스레드를 어떻게 인스턴스화해야합니까?
  2. 앱의 수명이 다한 동안 계속 유지해야할까요? 아니면 이것이 문제가되는지 확실하지 않은 경우 사용하지 않을 때 해제하고 다시 재생 해 보겠습니다.
  3. 다양한 메소드/객체에서 어떻게 참조/디스패치합니까?

이 상황을 직접 해결할 수있는 답변을 찾을 수 없었습니다. 이 하나 (Using a single shared background thread for iOS data processing?) 가까이 왔지만, 멀리 shied.

감사합니다.

답변

3

액세스는 다음과 같이 정적 기능을 통해 큐 :

static dispatch_queue_t my_serial_queue() { 

    static dispatch_queue_t s_serial_queue; 
    static dispatch_once_t s_done; 
    dispatch_once(&s_done, ^{s_serial_queue = dispatch_queue_create("com.app.my_queue_name", DISPATCH_QUEUE_SERIAL);}); 
    return s_serial_queue; 
} 
다음

같이 사용 ... 사실

dispatch_sync(my_serial_queue(), ^{ 
    //do something here 
}); 
+0

, 나는 세미콜론 (그 후 예상된다 없다는 오류) 첫 번째 줄에. – mkc842

+0

my_serial_queue() 선언에 의미가 있습니까? 전체 오류 메시지를 표시 할 수 있습니까? – combinatorial

+0

"정적 함수"는 메서드 내에서 선언 할 수 없습니다. 나는 블록에 익숙하지만 기능에는 익숙하지 않다. 어쨌든, 고마워. – mkc842

관련 문제