0

我试图弄清楚这段代码是否正在更新主线程上的 UI。这段代码在我专门为下载 JSON 提要而制作的一个类中。获取数据后,我解析它以返回一个数组,我将使用它来更新 UI,然后让代理知道数据已准备好。我的委托,一个视图控制器,将使用这个数组来更新 UI。我需要-parser:didFinishParsingWithResults:在一个dispatch_get_main_queue街区内完成吗?或者因为我在视图控制器类而不是这个类中更新 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];
});
4

2 回答 2

3
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

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

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

于 2012-08-05T05:27:38.977 回答
2

绝对用于dispatch_get_main_queue()更新您的 UI,该代码不是线程安全的,因此您总是希望在主线程上更新您的 UI。我经过惨痛的教训才学到这个 :-)

于 2012-08-05T05:28:26.803 回答