标题是整个问题。如果_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);
答案 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]
内的方法。