Objective c GCD和授权在哪个线程上?

Objective c GCD和授权在哪个线程上?,objective-c,grand-central-dispatch,delegation,Objective C,Grand Central Dispatch,Delegation,我试图弄清楚这段代码是否正在更新主线程上的UI。这段代码位于我专门为下载JSON提要而设计的类中。获取数据后,我解析它以返回一个数组,我将使用该数组更新UI,然后让代理知道数据已经准备好。我的代理(视图控制器)将使用此数组更新UI。是否需要在dispatch\u get\u main\u队列块中执行-parser:didfishparsingwithresults:?或者这不是必需的,因为我正在更新视图控制器类而不是这个类中的UI?谢谢大家! __block NSArray *results;

我试图弄清楚这段代码是否正在更新主线程上的UI。这段代码位于我专门为下载JSON提要而设计的类中。获取数据后,我解析它以返回一个数组,我将使用该数组更新UI,然后让代理知道数据已经准备好。我的代理(视图控制器)将使用此数组更新UI。是否需要在
dispatch\u get\u main\u队列
块中执行
-parser:didfishparsingwithresults:
?或者这不是必需的,因为我正在更新视图控制器类而不是这个类中的UI?谢谢大家!

__block NSArray *results;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData *responseData = [NSData dataWithContentsOfURL:url];
    results = [self parseData:responseData];
    [self.delegate parser:self didFinishParsingWithResults:results];
});
那不是主线。这是默认优先级全局队列,可能是任何线程

如果
parser:didFinishParsingWithResults:
在未分配到主队列/线程的情况下篡改UI元素,则您有问题

那不是主线。这是默认优先级全局队列,可能是任何线程


如果
parser:didFinishParsingWithResults:
在没有调度到主队列/线程的情况下篡改UI元素,那么您就有问题了。

一定要使用
dispatch\u get\u main\u queue()。我通过艰苦的方式了解到了这一点:-)

一定要使用
dispatch\u get\u main\u queue()
来更新您的UI,因为该代码不是线程安全的,所以您总是希望在主线程上更新UI。我用艰苦的方式学会了这一点:-)

明白了!我只是不确定告诉代理是否意味着它会自动返回到主线程。不知道我为什么做出这样的假设。谢谢,明白了!我只是不确定告诉代理是否意味着它会自动返回到主线程。不知道我为什么做出这样的假设。非常感谢。
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)