2011-10-18 6 views
0

タイトルは全体の質問です。コードの_asychブロックが意味のある作業を生成すると、メインスレッドが現在使いたいと思う情報が生成されることがあります。この裸の例ではメインスレッドで使用するためにGrand Central Dispatch _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

関連する問題