2011-10-18 2 views
0

제목은 전체 질문입니다. _asych 코드 블록이 의미있는 작업을 생성하면 주 스레드가 현재 사용하고자하는 정보가 생성되는 경우가 있습니다.메인 쓰레드에서 사용할 수 있도록 그랜드 센트럴 디스패치 _asych 블록에서 데이터 값을 다시 전달하려면 어떻게해야합니까?

이 노출 된 예에서

, 당신은 데이터 값을 얻을 것입니다 방법, 주 스레드 블록에서 MYDATA에 포함 된 문자열 데이터로 작업하기 :

dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0); 
dispatch_async(myQueue, ^{              
NSString *myData = [self getSavedData]; 
}); 
dispatch_async(myQueue, ^{ dispatch_release(myQueue); });   

표시하는 코드 도움을 확장하십시오 내게는, 간단한 사용 방법과이 NSLog, 또는 올바른 상당는 GCD 블록에 프로그램 상대의 메인 스레드에 배치 될 것입니다 :

NSLog(@"%@", myData); 

답변

1

중첩 할 수 있습니다 블록, 아직 각 실행이 다른 스레드.

dispatch_queue_t myQueue = dispatch_queue_create("someid", 0); 
dispatch_async(myQueue, ^{ 
     NSString *myData = [self getSavedData]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
       self.someLabel.text = myData; 
      }); 
    }); 
dispatch_async(myQueue, ^{ dispatch_release(myQueue); }); 

코드가 길면 중첩 된 블록을 포함하기가 어렵습니다. 따라서 dispatch_async 내부의 메소드를 [self processData:myData]과 같이 호출하면됩니다.

+0

어떻게 알면 간단합니다! 지금 나는 그것을하고 정말로 고맙습니다. – Ric

관련 문제