2014-04-28 1 views
0

나는 for 루프 반복을 증분 변수와 함께 사용할 수 있고 성공할 경우 증가하지만 블록이 빠르기 때문에 이상적으로 사용하고 싶습니다. for 루프 내부의 메소드는 백그라운드에서 처리되고 스레드와 소켓을 생성하여 속도를 늦추므로 다음으로 이동하기 전에 끝내기를 기다리고 싶습니다. 아래 코드는 다음과 같습니다.완결 블록이있는 메서드가 빠른 열거 블록 내에서 완료 될 때까지 기다림

for (NSString *uuid in file_assets) { 
     if (![asset_model isFileUploaded:uuid]) { 
      [self uploadFileAssetWithUUID:uuid :^(BOOL success){ 

       if (success) { 
        NSLog(@"Upload finished.."); 
       } 

      }]; 
     } 
    } 

다음 반복을 이동하려면 블록 내부에서 어떻게 통신합니까?

답변

1

기다리지 말고 기다리지 마십시오. 열. NSOperationQueue을 사용하여 모든 업로드를 만들고 동시 실행 수를 제어하십시오. 루프를 기다리려고하면 얻는다고 생각되는 속도 이점이 무효화되고 주 스레드를 차단할 위험이 있습니다.

+0

의미가 있습니다! 나는 큐를 사용하는 것을 생각조차하지 못했지만 아마 이런 종류의 계산에 더 적합 할 것이다. 고맙습니다. –

+0

@LibanAbdulle에 대한 해결책은이 답을 찾지 못했습니까? – Wain

+0

안녕하세요, 계정 및 기록을 삭제하고 싶었습니다. –

0

이렇게하려면 디스패치 큐를 사용하십시오. 귀하의 필요를 충족시킬 수 있다고 생각합니다.

dispatch_queue_t exampleQueue = dispatch_queue_create("NewQueue", NULL); 
dispatch_async(exampleQueue, ^{ 
// do your upload.... 

dispatch_queue_t queue=dispatch_get_main_queue(); 
dispatch_async(queue, ^{ 

do your update after upload 

}); 
});