Как передать значения данных обратно из блока Grand Central Dispatch _asych для использования основным потоком? - PullRequest
0 голосов
/ 18 октября 2011

Заголовок - это целый вопрос.Если блок кода _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 Ответ

1 голос
/ 18 октября 2011

Вы можете вкладывать блоки, но каждый из них запускается в разных потоках .

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].

...