2013-03-28 4 views
0

나는 엄지 손가락 생성을 상당히하는 메소드를 먼저 호출하는 코드 조각을 가지고 있기 때문에 약 1 초 동안 장치가 느려집니다. 첫 번째 메서드가 호출되기 전에 "로딩 메시지"를 생성하고 첫 번째 메서드가 완료되면이를 제거하는 메서드를 실행하고 싶습니다.메소드를 기다리는 중 또는 백그라운드에서 실행 중

[picker dismissViewControllerAnimated:YES completion:^{ 
    NSLog(@"Loading"); 
    [self generatingThumbnailMessageShow]; 
    [self loadAllEffects]; 

}]; 

문제가 될 것으로 보인다 그 "generatingThumbnailMessageShow"방법은 여전히 ​​"loadAllEffects"메시지가 완료된 후 호출되는 것 같다 "loadAllEffects"방법 전에 있지만. 첫 번째 메서드가 완료 될 때만 "loadAllEffects"메서드를 호출하는 가장 좋은 방법은 무엇입니까?

+0

같은이? – holex

답변

3

문제는 [self loadAllEffects]이 주 스레드에서 실행되고 UI가 차단된다는 것입니다. UI에 대한 변경은 프로그램 제어가 주 실행 루프로 돌아온 후에 만 ​​볼 수 있습니다.

당신은 백그라운드 스레드에 [self generatingThumbnailMessageShow];의 실행을 이동`generatingThumbnailMessageShow`가 다른 스레드에서 실행 않습니다

[picker dismissViewControllerAnimated:YES completion:^{ 
    NSLog(@"Loading"); 
    // Show "loading" message (must be done on main thread) 
    [self generatingThumbnailMessageShow]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // perform long running task on background thread 
     [self loadAllEffects]; 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      // Hide "loading" message (must be done on main thread again). 
      [self generatingThumbnailMessageHide]; 
     }) 
    }) 

}]; 
+0

안녕하세요. 덕분에 도움에 완벽하게 감사했습니다. 나는 그 대답을 받아 들일 것이다. – ORStudios

+0

@ IconicDigital : 안녕하세요. –

관련 문제