2012-09-17 2 views

답변

2

"업로드"블록이 무엇이든간에 GCD 직렬 대기열을 만든 다음 업로드 블록을 모두 dispatch_async해야합니다.

는 큐를 만들려면 :

dispatch_queue_t myFifoQueue = dispatch_queue_create("com.example.myfifoqueue",DISPATCH_QUEUE_SERIAL);

을 당신이 지금 업로드 블록을 파견 할 수 큐를 생성했다면. 큐에서 이러한 블록 중 하나 파견 :

dispatch_async(myFifoQueue,myUploadBlock);

"dispatch_async는"당신의 블록이 직렬 큐에 추가됩니다 당신을 보장하지만, 현재의 thread (보통 메인 스레드)가 기다리지 않습니다를 완료하려면 블록하십시오. 직렬 대기열을 사용하면 모든 블록이 FIFO 순서로 실행됩니다.

예. 당신은 NSArray *myArray을 가지고 있고 당신은 방법을 사용하여 배열 객체가 다음 이런 방식으로 코드를 작성할 수 있습니다 -(void)processObject:(id)object를 호출 한 큐에 처리 할 경우 :

for(id object in myArray) { 
    dispatch_async(myFifoQueue,^{ 
     [self processObject:object]; 
    } 
); 
} 

은 기본적으로 당신이 여기에서하면 모든 개체를 열거하는 것입니다 배열을 만들고 "processObject :"메서드를 호출하는 간단한 블록을 직렬 큐에 제출하십시오. processObject가 작업을 완료하는 데 걸리는 시간은 무엇이든 dispatch_async가 즉시 반환되며 직렬 대기열은 백그라운드 스레드에서 연속적으로 블록을 처리합니다. 모든 블록이 완료된 시점을 알 수있는 방법이 여기에 없으므로 큐의 끝에서 주 스레드에게 알리는 블록을 큐의 끝에 제출하는 것이 좋습니다 (즉, UI 업데이트 가능) :

dispatch_async(myFifoQueue,^{ 
dispatch_async(dispatch_get_main_queue(), 
    ^{ 
     [self endOfUpload]; 
     }); 
}); 
+0

원하는 것을 더 잘 설명해야합니다. 일반적인 질문 ==> 일반적인 대답 – viggio24

+0

나는 GCD의 새로운 사람이다 그래서 pls는 나를 도울 것이다 – Ben10

+0

나는 나의보기를 명확하게했다. 그러나 나는 애플의 문서와 웹 튜토리얼을 읽으라고 제안한다. – viggio24

관련 문제