如何从Grand Central Dispatch _asych块传回数据值以供主线程使用?

时间:2011-10-18 07:55:39

标签: ios4 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 个答案:

答案 0 :(得分: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]内的方法。