2012-10-29 2 views
8

GCD 또는 많은 스레딩을 내 애플 리케이션에서 사용하지는 않았지만 다른 스레드에서 하나 또는 두 개의 메소드를 실행해야하는 상황에 처했습니다. 이 메서드가 완료되면 콜백에서 주 스레드를 사용하여 다른 메서드를 호출해야합니다. 스레드가 작업을 마쳤지 만 여전히 너무 명확하지는 않은지 검색하는 방법을 살펴 보았습니다.콜센터 방식의 IOS 그랜드 센트럴 디스패치

테스트 응용 프로그램을 만들고 간단한 예제로 viewDidLoad 메서드를 사용했습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     NSLog(@"viewDidLoad called"); 
     sleep(5); // simulating a thread being tied up for 5 seconds 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self callbackMethod]; // method called after above thread has completed running 
     }); 

    }); 


} 

이 예제는 내가 수행하려는 작업에 적합합니까? 응용 프로그램을 실행할 때 sleep (5)가 끝난 후에 콜백 메서드가 호출 된 것처럼 보입니다. 이것은이 상황을 처리하는 올바른 방법입니까, 아니면 제가 길을 벗어 났습니까?

+2

그래, 제대로 작동해야합니다. – geraldWilliam

+0

빠른 답변을 보내 주셔서 감사합니다! @matt는 추가 링크도 제공해 주셔서 감사합니다. 매우 감사! – tg2007

답변

6

당신이 자리하고 있습니다. 그것은 주 스레드에서 내리거나 내려 가기위한 표준 패턴입니다. 여기에 내 대답을 참조하십시오

그리고 바로이 방식으로 구성 내 책에서 예제 코드에 대한 https://stackoverflow.com/a/13080519/341994 : 그 예에서

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch25p868mandelbrotGCD/ch38p1106mandelbrotNoThreading/MyMandelbrotView.swift

, drawThatPuppy이 시간을 할 수있는 메인 스레드를 얻는 방법에 대해 알아 - 계산을 소비 한 다음 메인 스레드로 돌아가 인터페이스로 드로잉합니다.

관련 문제